将预处理器变量传递给 nmake 构建环境

Posted

技术标签:

【中文标题】将预处理器变量传递给 nmake 构建环境【英文标题】:Passing preprocessor variable to nmake build environment 【发布时间】:2012-06-11 22:48:32 【问题描述】:

我在 Win7 x64 构建环境中使用 nmake 构建驱动程序时遇到问题。我正在定义一个预处理器变量并使用 -

通过命令行传递它
build /nmake "USER_C_FLAGS=/DMyVersion=3"

而构建日志是 -

...
/DMyVersion=3
/typedil- 
/wd4603
/wd4627
....

所以,我清楚地将变量视为编译器选项的一部分。现在在标题文件中,我这样做了

#define otherVersion 10
#ifdef MyVersion
  #undef otherVersion
  #define otherVersion MyVersion
#endif

#define FileVersion otherVersion

问题是 FileVersion 始终为 10 而不管 MyVersion 定义是否已通过并存在于环境中。为了测试,发生了什么,我做了 -

#ifdef MyVersion
  #error MyVersion is present in the environment.
#endif

我看到正在打印的语句。但是为什么 otherVersion 总是 10 尽管环境中存在预处理器指令?为什么它不采用通过命令行选项传递的值 3

【问题讨论】:

【参考方案1】:

我不确定这是否适合您,但有些人确实尝试使用 msbuild 实现相同的效果。他们必须调整项目文件以将他们的定义“导入”构建过程。看看MSBuild.exe not accepting either /p:DefineConstants nor /p:PreprocessorDefinitions

【讨论】:

以上是关于将预处理器变量传递给 nmake 构建环境的主要内容,如果未能解决你的问题,请参考以下文章

将变量传递给注入的服务以用作装饰器参数

如何在库加载时将预处理器定义传递给 DLL

如何将变量传递给自定义 Django 模板加载器?

如何使用 NMake 设置环境变量

Kotlin 协程协程异常处理 ② ( SupervisorJob 协程 | supervisorScope 协程作用域构建器函数 )

Kotlin 协程协程异常处理 ② ( SupervisorJob 协程 | supervisorScope 协程作用域构建器函数 )