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

CMake中如何在源码中使用generate_product_version生成的头文件?

CMake generate_product_version生成头文件的引用方案与路径选择

一、最佳引用方式

步骤1:在CMake中添加二进制目录到包含路径

通过target_include_directories将生成头文件所在的CMAKE_CURRENT_BINARY_DIR目录添加到目标的包含路径中,让编译时编译器能找到该头文件。示例CMake代码:

# 生成版本信息头文件
generate_product_version(
    VersionInfo_Core
    NAME "My Core DLL"
    VERSION_MAJOR 1
    VERSION_MINOR 0
    VERSION_PATCH 0
    VERSION_BUILD 123
)

# 为你的DLL目标添加二进制目录作为私有包含路径
target_include_directories(YourDLLTarget PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
  • 这里用PRIVATE是因为该头文件仅用于目标内部代码,无需对外暴露;如果多个目标需要引用,可根据需求改为PUBLIC或INTERFACE。

步骤2:在代码中直接引用头文件

在src/test.cpp中直接包含生成的头文件即可:

#include "VersionInfo_Core.h"

void displayVersion() {
    // 使用生成的版本宏
    std::cout << "Product Version: " << PRODUCT_VERSION_FULL_STR << std::endl;
}

二、能否将生成文件放到源码目录?

不推荐这么做,核心原因如下:

  • 源码目录应仅存放手动编写的源代码,构建产物放在二进制目录是CMake的标准规范,可避免污染源码仓库
  • 不同构建配置(Debug/Release)会生成各自的版本文件,放在源码目录会导致文件被覆盖
  • 清理构建时只需删除二进制目录即可,不会影响源码文件

如果确实有特殊需求要放到源码目录,可以通过OUTPUT_DIR参数指定生成路径:

generate_product_version(
    VersionInfo_Core
    NAME "My Core DLL"
    VERSION_MAJOR 1
    VERSION_MINOR 0
    OUTPUT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src
)

但需要注意:需将生成的VersionInfo_Core.h添加到.gitignore中,避免提交到版本控制;同时不同构建配置会覆盖该文件,可能引发编译问题。

内容的提问来源于stack exchange,提问作者Kevin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:52:40