【问题标题】:Set preprocessor definitions from file content in Visual C++在 Visual C++ 中从文件内容设置预处理器定义
【发布时间】:2014-04-25 13:18:21
【问题描述】:

我的项目中有一个文件,其中包含项目版本号。我必须在我的代码中将此文件的内容作为预处理器定义提供。

我需要以某种方式将文件中的值作为 /D 参数传递给编译器。

我尝试添加预处理器定义

VERSION=$(Version)

并在预构建步骤中设置了版本环境变量,但我没有找到执行后者的方法,所以我卡住了。

【问题讨论】:

  • 在 .cpp 或 .rc 文件中自动生成带有 #define 的 .h 文件是简单且样板的解决方案。控制 /D 编译器选项可能是可能的,很大程度上取决于您的构建方式,很少非常实用。

标签: c++ visual-studio visual-c++ c-preprocessor


【解决方案1】:

作为一种解决方法,可以创建一个预构建步骤,该步骤调用一个脚本来读取文件并在标题中生成宏定义。那么这个头文件就可以包含在我的项目中了。

但是我不觉得这个解决方案很好,我希望有更好的解决方案。

【讨论】:

  • 这实际上是我的一个项目处理版本控制的方式。作为预构建步骤,它从 Mercurial 获取版本号并将相应的#define 写入头文件。标头包含在我的项目中,因此我可以使用新生成的版本号,无需任何额外工作。
  • 我根据当前的投票和 cmets 接受了这个,但我希望有人能提出更准确的解决方案。
【解决方案2】:

作为生成 .h 文件的替代方法,您还可以生成 .vsprops(属性表)文件。 .vsprops 文件对应于 .vcproj 文件,而 .h 文件对应于 .cpp 文件。特别是,您可以在属性表中定义/D 命令行选项。这就是/D UNICODE 通常通过默认属性表定义的方式。

额外的好处是您还可以为链接器设置/VERSION 标志,这是您无法通过头文件执行的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    相关资源
    最近更新 更多