CMake TARGET_LINK_LIBRARIES中包含多个静态库

Gui*_*not 3 c++ cmake dynamic-linking

我有一个CMake多重定义链接问题与依赖于包含静态库的共享库的可执行文件.

我创建了一个foo依赖于静态库的共享库bar.

add_library(foo SHARED foo.cpp)
target_link_libraries(foo bar)
Run Code Online (Sandbox Code Playgroud)

根据定义,内容bar在库中foo.

然后我创建一个exe依赖于的可执行文件foo.

add_executable(exe exe.cpp)
target_link_libraries(exe foo)
Run Code Online (Sandbox Code Playgroud)

在链接时,我有一个multiple definition警告/错误,告诉我库bar中的函数出现两次.在查看链接命令时,我看到它exe与链接,bar并且foo不一致.

我是否会错过依赖声明中的某些内容?我错过了一个神奇的CMake关键词吗?

Ric*_*ges 5

像这样:

add_library(foo SHARED <foo source files>)
target_link_libraries(foo PRIVATE bar)
Run Code Online (Sandbox Code Playgroud)

如果其他库对链接foo,请确保使用CMake 的关键字PRIVATE,PUBLICINTERFACE