使用CMake在C ++跨平台项目中包含Boost库

时间:2018-05-18 14:47:40

标签: c++ boost build cmake compilation

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

2 个答案:

答案 0 :(得分:0)

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

上的文档

请查看下面的链接,了解编译boost

的使用示例

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

HTH

答案 1 :(得分:0)

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 lib文件,从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