【问题标题】:Include Boost library in C++ cross platform project using CMake使用 CMake 在 C++ 跨平台项目中包含 Boost 库
【发布时间】:2018-05-18 14:47:40
【问题描述】:

我需要在使用 CMAKE 作为构建管理系统的 C++ 项目中包含一个 Boost 库(特别是 Context)。 因为,给定存储库的源代码,需要使用cmakemake 构建项目,而无需在目标系统(unix、windows 或其他)中安装任何其他软件或库,我需要配置 Cmake 以获取从我的存储库中获取 Boost 的源,对其进行编译,并将其链接到我的项目,而无需在目标系统中单独安装 Boost 库。 这可行吗?

【问题讨论】:

  • 这绝对是可能的(我每天都使用这样配置的构建系统),但我没有设置它,所以很遗憾我不能说它是如何完成的。
  • take the source of Boost from my repository 是什么意思?下载提升?还是使用存储库中包含的标头?
  • @eozd 我的意思是项目应该是自包含的。由于在目标系统中,项目应该使用 cmake 构建,我想 Boost 库的源代码必须与我的源代码一起包含在我的存储库中,以便它们可以一起编译。

标签: c++ boost build cmake compilation


【解决方案1】:

是的,您可以使用 ExternalProject_Add,请参阅https://cmake.org/cmake/help/latest/module/ExternalProject.html 的文档

查看下面的链接以获取编译 boost 的使用示例

https://github.com/arnaudgelas/ExternalProject/blob/master/External-Boost.cmake

HTH

【讨论】:

    【解决方案2】:

    CMake 有一个用于处理 boost` 库的特定模块,请参阅 FindBoost

    CMakeLists.txt 文件通常包含类似这样的内容以链接到 boost 库:

    find_package(Boost REQUIRED COMPONENTS context )
    if(Boost_FOUND)
      target_include_directories(${PROJECT_NAME} PRIVATE ${Boost_INCLUDE_DIRS})
    
      target_link_libraries(${PROJECT_NAME} INTERFACE Boost::context)
    endif(Boost_FOUND)
    

    这只会链接boost::context 库。您必须按照@Hugo 的回答中的建议构建 boost::context 库文件,从here 之类的地方下载它们,或者使用包管理器将它们安装在 linux 上。

    如果 Contextheader only,您只需要:

    find_package(Boost REQUIRED COMPONENTS boost)
    if(Boost_FOUND)
      target_include_directories(${PROJECT_NAME} PRIVATE ${Boost_INCLUDE_DIRS})
    endif(Boost_FOUND)
    

    无论哪种情况,您都可以在项目中包含boost::context 文件,然后按照FindBoost 文档中的说明设置变量BOOST_ROOTBOOST_INCLUDEDIR

    【讨论】:

    • 我知道 FindBoost 模块在系统上查找 boost 库,作为二进制文件,而不是源代码。另外,上下文不仅仅是此处描述的标题:boost.org/doc/libs/1_67_0/more/getting_started/… 无论如何,我昨天尝试了一整天来使用 FindBoost,但效果不佳。
    • 对不起@Archimedis 我认为boost::context 只是标题,因为尽管设置为build-all,但我的系统没有构建它...我已经编辑了我的答案并建议了一个您可以通过几种不同的方式来获取增强上下文的二进制文件。 HTH
    猜你喜欢
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 2022-11-27
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    相关资源
    最近更新 更多