我需要在使用 CMAKE 作为构建管理系统的C++项目中包含一个 Boost 库(特别是Context
)。 由于给定存储库的源代码,项目需要使用cmake
和make
构建,而无需在目标系统(unix,windows或其他)中安装任何其他软件或库,因此我需要配置Cmake以从我的存储库中获取Boost的源代码,编译它,并将其链接到我的项目,而无需在单独的步骤中在目标系统中安装Boost库。 这可行吗?
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 文件,从像这里这样的地方下载它们或使用包管理器将它们安装在 Linux 上。
如果Context
header 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_ROOT
或BOOST_INCLUDEDIR
设置变量。
是的,您可以使用ExternalProject_Add,请参阅 https://cmake.org/cmake/help/latest/module/ExternalProject.html
查看下面的链接,了解编译 boost 的使用示例
https://github.com/arnaudgelas/ExternalProject/blob/master/External-Boost.cmake
呵呵