如何使用cmake';s目标链接库到匹配全局的链接库?
我已经预先构建了第三方库(Boost),我想链接到我的目标。它们都存储在一个目录下,如${BOOST_PATH}/lib/libboost_thread.a、${BOOST_PATH}/lib/libboost_log.a等。 所以我想这样做:如何使用cmake';s目标链接库到匹配全局的链接库?,cmake,glob,Cmake,Glob,我已经预先构建了第三方库(Boost),我想链接到我的目标。它们都存储在一个目录下,如${BOOST_PATH}/lib/libboost_thread.a、${BOOST_PATH}/lib/libboost_log.a等。 所以我想这样做: target\u link\u库(${target}PRIVATE“${BOOST\u PATH}/libboost*.a”) 我读过这本书,它可能会被使用,但我强烈反对。我也不确定它是否会起作用。为什么? 如果无法更改Boost库的目录结构,您将如何解
target\u link\u库(${target}PRIVATE“${BOOST\u PATH}/libboost*.a”)
我读过这本书,它可能会被使用,但我强烈反对。我也不确定它是否会起作用。为什么?
如果无法更改Boost库的目录结构,您将如何解决此问题?有两种可能性
target_link_libraries(${TARGET} PRIVATE
"${BOOST_PATH}/libboost_filesystem.a"
"${BOOST_PATH}/libboost_system.a"
"${BOOST_PATH}/libboost_chrono.a"
...
)
file(GLOB LIBS "${BOOST_PATH}/libboost*.a")
target_link_libraries(${TARGET} PRIVATE ${LIBS})
或者您可以使用CMake内置功能与Boost链接,例如:
set(Boost_USE_STATIC_LIBS ON)
find_package(Boost 1.55.0 REQUIRED thread system log)
include_directories(${Boost_INCLUDE_DIRS})
target_link_libraries(${TARGET} ${Boost_LIBRARIES})
这假设Boost是标准安装,具有默认目录布局
我不认为globbing是一个好主意,因为您可能并不依赖于所有Boost编译库,而且您会毫无理由地降低链接速度
即使您这样做了,明确列出依赖项仍然是一个好主意。当我这样做时,我会得到“CMakeLists.txt:21(target\u link\u libraries):target\u link\u libraries调用的参数数量不正确”