You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将CMake中的宏值传递给C++变量,无需使用配置文件

实现方案(无需配置文件)

你当前使用的编译定义注入方式本身就可以实现需求,仅需要调整两处写法即可:

  1. 修改CMake侧的宏定义写法
    需要把PROJECT_VERSION的值包裹为字符串格式再注入,否则C++侧会把版本号识别为数值表达式而非字符串:
# 如果你要全局生效可以保留add_compile_definitions,建议优先给指定目标加定义避免污染
# 全局写法
add_compile_definitions(PROJECT_VERSION="${PROJECT_VERSION}")
# 更推荐的目标级写法,替换为你实际的编译目标名即可
# target_compile_definitions(your_target_name PRIVATE PROJECT_VERSION="${PROJECT_VERSION}")
  1. 调整C++侧的调用写法
    你写的@PROJECT_VERSION@是CMake配置文件专属的占位符,不需要配置文件的场景下无需使用,直接调用注入的宏即可:
#include <iostream>

#ifdef PROJECT_VERSION
const char* const project_version = PROJECT_VERSION;
#else
const char* const project_version = "unknown";
#endif

int main() {
    std::cout << "Version: " << project_version << std::endl;
    return 0;
}

注意事项

  • 不需要额外新增#define version "@PROJECT_VERSION@"的逻辑,这段代码仅在使用configure_file生成头文件的场景下才会被CMake替换生效,你当前的方案里这段代码不会工作
  • 优先使用target_compile_definitions而非全局的add_compile_definitions,避免给不需要版本号的编译目标引入多余宏定义

内容的提问来源于stack exchange,提问作者Pat cm pro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:45:01