Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用cmake';s目标链接库到匹配全局的链接库?_Cmake_Glob - Fatal编程技术网

如何使用cmake';s目标链接库到匹配全局的链接库?

如何使用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库的目录结构,您将如何解

我已经预先构建了第三方库(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库的目录结构,您将如何解决此问题?

有两种可能性

  • 不鼓励使用glob,因为如果您将新的boost库添加到此文件夹中,CMake将不会自动检测到此情况。您必须手动重新运行CMake以获取新库。然而,除了在每次构建调用时以某种方式执行glob之外,没有其他globbing解决方案可以防止这个问题。因此,您可以简单地列出所有文件:

    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调用的参数数量不正确”