我有一个项目,我在其中构建一个名为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库与库和可执行文件链接起来,或者我做错了什么?
答案 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?