如何让cmake找到boost库

在此之前,我们已经 [[使用mingw-w64编译Boost]]。
然后,我们来编写项目的 CMakeList 文件。

定义好关键的变量:

set(BOOST_ROOT "C:/Program Files/boost_1_83_0")
set(Boost_DIR "${BOOST_ROOT}/tools/cmake/config")
set(BOOST_LIBRARYDIR "${BOOST_ROOT}/stage/lib")
set(BOOST_INCLUDEDIR "${BOOST_ROOT}/boost")
set(boost_headers_DIR "${BOOST_LIBRARYDIR}/cmake/boost_headers-1.83.0")

这里面包括了可能用到的 .cmake 文件、头文件以及库文件的根目录。
然后,我们开始配置要调用的库中模块,这里通过了循环添加模块的路径来简化配置。

list(APPEND boost_libs "filesystem" "locale")

如上所示,假如我们想添加 filesystemlocale 两个模块。当然我们可以加很多个,直接配置在 boost_libs 这个列表中。

FOREACH(lib ${boost_libs})
message(${lib})
set(boost_${lib}_DIR "${BOOST_LIBRARYDIR}/cmake/boost_${lib}-1.83.0")
ENDFOREACH(lib)

然后,我们循环遍历 boost_libs 中的模块名,并将对应的路径设置成对应的变量中。

find_package(
  Boost
  COMPONENTS ${boost_libs}
  REQUIRED NO_MODULE)

message(STATUS "Boost_LIBRARIES = ${Boost_LIBRARIES}")
message(STATUS "Boost_INCLUDE_DIRS = ${Boost_INCLUDE_DIRS}")

将路径都定义完成后,我们使用 find_package 命令自动将 boost_libs 列表中所有的库都加入到编译配置中。
最后,加入头文件的目录以及将执行文件链接到库。

include_directories(${BOOST_INCLUDEDIR})

set(SOURCES main.cc xxx.cc xxx.cc)
add_executable(exe ${SOURCES})
target_link_libraries(exe ${Boost_LIBRARIES})

Reference

VsCode + mingw编译器下boost库的安装 - Fight!GO - 博客园 (cnblogs.com)
C++ Boost 库 Windows 环境 GCC 编译安装及 CMake 相关配置_boost cmake_PeakCrosser的博客-CSDN博客

【CMake 语法】(7) CMake 列表操作-CSDN博客 LIST

posted @ 2023-10-14 11:01  pomolnc  阅读(130)  评论(0编辑  收藏  举报