CMake:库链接要求

时间:2014-06-13 12:04:15

标签: linux cmake

我有一个项目,我在其中构建一个名为mylibA的库,该库使用对pthread库的调用。在我的CMake项目文件中,我使用以下命令:

add_library( mylibA STATIC ${mylib_SRC} )
target_link_library( mylibA pthread )

在单独的项目中,创建一个使用mylibA的可执行文件。我的CMake项目文件如下所示:

add_executable( myexe ${myexe_SRC} )
target_link_library( myexe mylibA pthread )

如果我遗漏了可执行项​​目的pthread链接,我会遇到链接问题。是否需要将pthread库与库和可执行文件链接起来,或者我做错了什么?

2 个答案:

答案 0 :(得分:2)

构建静态库时,不要链接它,因此不包括任何指定为链接依赖项的内容。

但是,从CMake 2.8.12开始,您可以指定使用该库的任何人都应该使用的接口(包括文件,编译器选项等)。

在你的情况下,你可以写:

add_library(mylibA STATIC ${mylib_SRC})
target_link_libraries(mylibA INTERFACE pthread)

答案 1 :(得分:0)

我认为你不应该将mylibA与pthread链接起来。你应该等到与pthread的链接,直到你有一个可执行文件。

为什么不使用类似的东西(从其他问题复制):

FIND_PACKAGE ( Threads REQUIRED ) ADD_EXECUTABLE ( test test.cpp ) TARGET_LINK_LIBRARIES ( test ${CMAKE_THREAD_LIBS_INIT} )

而不是硬编码pthread?