使用 CMake 在跨平台项目中C++包含 Boost 库
Include Boost library in C++ cross platform project using CMake
我需要在使用 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
呵呵
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 编译包含字符串的代码时遇到问题
- c++库的公共头文件中应该包含什么
- 将包含C样式数组的对象初始化为成员变量(C++)
- 是否需要删除包含对象的"pair"?
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 使用mongocxx驱动程序时包含头文件问题
- 如何在h文件中包含.o对象文件
- 在混合代码库中将C转换为C++时出现许多包含错误
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- cmath抛出错误C2062、C2059、C2143和C2447.cmath包含在矢量文件中
- 为什么您需要C++头文件的包含保护
- 无法在UE4中包含BP类到CPP类
- g++ 说函数不存在,即使包含正确的标头
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- Visual C++GC接口如何启用它以及要包含哪个库
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)