CMake TARGET_LINK_LIBRARIES中包含多个静态库

时间:2014-12-15 18:15:09

标签: c++ cmake dynamic-linking

我有一个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中的函数存在两次。查看链接命令时,我发现exebarfoo相关联,这与{x}}不一致。

我是否遗漏了依赖声明中的内容?我是否错过了一个神奇的CMake关键字?

1 个答案:

答案 0 :(得分:5)

像这样:

add_library(foo SHARED <foo source files>)
target_link_libraries(foo PRIVATE bar)

如果其他图书馆与foo相关联,请务必使用CMake keyword PRIVATEPUBLICINTERFACE