我有一个CMake
多个定义,将问题与依赖于包含静态库的共享库的可执行文件链接起来。
我创建了一个共享库foo
,它依赖于静态库bar
。
add_library(foo SHARED foo.cpp)
target_link_libraries(foo bar)
根据定义,bar
的内容位于库foo
中。
然后我创建一个依赖于exe
的可执行文件foo
。
add_executable(exe exe.cpp)
target_link_libraries(exe foo)
在链接时,我有multiple definition
警告/错误,告诉我库bar
中的函数存在两次。查看链接命令时,我发现exe
与bar
和foo
相关联,这与{x}}不一致。
我是否遗漏了依赖声明中的内容?我是否错过了一个神奇的CMake
关键字?
答案 0 :(得分:5)
像这样:
add_library(foo SHARED <foo source files>)
target_link_libraries(foo PRIVATE bar)
如果其他图书馆与foo
相关联,请务必使用CMake
keyword PRIVATE
,PUBLIC
或INTERFACE