如何一次性定义CMake变量并在vcpkg triplet与CMakeLists.txt中共用
在VCPKG Triplet与项目CMakeLists间共享变量的方法
你可以通过以下几种方式实现变量在VCPKG triplet文件和项目CMakeLists.txt中的共享:
方案1:使用环境变量
环境变量是跨进程共享配置的通用方式,VCPKG和CMake都能直接读取环境变量的值:
设置环境变量:
- macOS/Linux终端:
export MAC_OS_TARGET_VERSION=13.0 - Windows命令提示符:
set MAC_OS_TARGET_VERSION=13.0
(如果需要持久生效,可以将配置写入系统环境变量或shell配置文件,比如~/.bashrc)
- macOS/Linux终端:
在triplet文件(arm64-osx.cmake)中读取:
set(VCPKG_OSX_DEPLOYMENT_TARGET "$ENV{MAC_OS_TARGET_VERSION}")
- 在项目根目录CMakeLists.txt中读取:
set(CMAKE_OSX_DEPLOYMENT_TARGET "$ENV{MAC_OS_TARGET_VERSION}")
方案2:使用共享CMake脚本
创建一个单独的CMake脚本文件集中管理共享变量,让triplet和项目脚本都引用它:
- 创建共享配置脚本:比如在项目根目录下新建
cmake/shared-vars.cmake,内容为:
# shared-vars.cmake set(MAC_OS_TARGET_VERSION 13.0 CACHE INTERNAL "Shared macOS deployment target version")
- 在triplet文件中引入脚本:
# 注意替换为实际的脚本路径,建议使用绝对路径或基于VCPKG_ROOT的相对路径 include("/path/to/your/project/cmake/shared-vars.cmake") set(VCPKG_OSX_DEPLOYMENT_TARGET "${MAC_OS_TARGET_VERSION}")
- 在项目CMakeLists.txt中引入脚本:
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/shared-vars.cmake) set(CMAKE_OSX_DEPLOYMENT_TARGET "${MAC_OS_TARGET_VERSION}")
方案3:通过CMake命令行参数传递
在执行CMake配置时直接传递变量参数,同时让VCPKG和项目都读取该参数:
- 执行CMake配置命令:
cmake -S . -B build -DMAC_OS_TARGET_VERSION=13.0 -DVCPKG_CMAKE_ARGS="-DMAC_OS_TARGET_VERSION=13.0"
- 在triplet文件中使用变量:
set(VCPKG_OSX_DEPLOYMENT_TARGET "${MAC_OS_TARGET_VERSION}")
- 在项目CMakeLists.txt中使用变量:
set(CMAKE_OSX_DEPLOYMENT_TARGET "${MAC_OS_TARGET_VERSION}")
方案对比
- 环境变量:无需修改额外文件,适合自动化构建场景,但需要确保环境变量在构建环境中已正确设置。
- 共享CMake脚本:集中管理变量,修改一次即可同步到所有引用处,但需要处理脚本路径的正确性。
- 命令行参数:灵活度高,适合临时调整配置,但每次构建都需要传递参数,适合测试场景。
内容的提问来源于stack exchange,提问作者Matteo
相关产品推荐
相关产品推荐

