如何在CMake全组件安装规则中排除Boost依赖项
解决方案
要排除Boost的安装规则,核心是阻止Boost自身的CMake配置生成install指令,以下是具体实现方式:
方法一:通过FetchContent传递参数禁用Boost安装规则
修改FetchContent_Declare部分,添加CMAKE_ARGS参数,告诉Boost的构建系统跳过安装步骤:
cmake_minimum_required(VERSION 3.26) project(subway LANGUAGES CXX) include(FetchContent) FetchContent_Declare( boost URL https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz # 替换为你实际的Boost来源 CMAKE_ARGS -DBOOST_SKIP_INSTALL=ON # 禁用Boost的安装规则 -DBOOST_ALL_NO_LIB=OFF # 保持Boost库的自动链接(按需调整) ) FetchContent_MakeAvailable(boost) add_library(heavy-rail heavy-rail.cpp) install(TARGETS heavy-rail COMPONENT heavy-rail) add_library(bus bus.cpp) install(TARGETS bus COMPONENT bus)
BOOST_SKIP_INSTALL是Boost CMake配置提供的官方变量,设置为ON会直接跳过所有安装规则的生成。- 这个方法从根源上避免Boost的安装规则被写入
cmake_install.cmake,自然满足无论指定哪个组件都排除Boost安装规则的需求。
方法二:使用CMake内置变量跳过安装规则(兼容旧版Boost)
如果你的Boost版本不支持BOOST_SKIP_INSTALL,可以传递CMake内置的CMAKE_SKIP_INSTALL_RULES变量给Boost的配置过程:
FetchContent_Declare( boost URL ... # 填写你的Boost来源 CMAKE_ARGS -DCMAKE_SKIP_INSTALL_RULES=ON )
这个变量会让Boost的CMake脚本中所有install指令失效,同样不会在主项目的cmake_install.cmake中生成Boost的安装内容。
验证效果
配置并生成项目后,查看cmake_install.cmake文件,里面只会包含heavy-rail和bus两个组件的安装规则,Boost相关的安装代码会完全消失;无论执行cmake --install . --component heavy-rail还是其他组件安装命令,都不会触发Boost的安装操作。
内容的提问来源于stack exchange,提问作者Luka Govedič
相关产品推荐
相关产品推荐

