Visual Studio中的解决方案级预处理器定义



我有一个大型解决方案(100个项目(,其中许多项目依赖于头文件(shared.h(中的预处理器定义(NEWGUI(来在代码的两种有效状态(旧gui和新gui(之间切换。

我正试图围绕这个宏添加一个编译保护

#ifndef OLDGUI
#define NEWGUI
#endif

这样我们就不必在shared.h中注释掉或删除这一行来构建旧的gui,这会减慢增量构建的速度。然后,我希望找到一种在配置之外设置OLDGUI的方法。使用CMake,我们可以使用cmake .. -DOLD_GUI

我正在azure管道中执行MSBuild任务中的构建。

我第一次尝试在解决方案上设置OLDGUI是使用-p标志来设置预处理器定义,但我意识到这会覆盖所有现有的预处理器定义。

我的第二次尝试是创建一个新的配置,它只是覆盖了具有shared.h的项目,并在那里添加了一个预处理器定义,但这不会影响所有其他依赖shared.h的项目,并且构建最终会产生旧gui和新gui的嵌合体。

我根本不确定什么是正确的方法,我希望我不必手动向100个项目添加配置,就可以单独向每个项目添加OLDGUI。对于MSBuild,这看起来越来越麻烦。所以我的问题是:我该怎么做?最初的想法:

  1. 有没有办法在编译时使用类似-p:PreprocessorDefinitions=OLDGUI的东西来添加到现有的预处理器定义中
  2. 有没有办法在一个配置下为所有项目添加一个全局属性页,这样我就可以在那里定义OLDGUI
  3. 有没有办法在编译时将全局属性页添加到所有项目中,以执行与(2(相同的操作

在2013年的这个答案中找到了解决方案。这是一个黑客,但它会的。

https://stackoverflow.com/a/14206134/9691276

我采取的方法是:

$(ExternalPreprocessorDefinitions)添加到C++>每个项目继承的全局属性页中的预处理器(这是预先存在的(。

在构建管道中,只需设置环境变量ExternalPreprocessorDefinitions=OLDGUI

沃伊拉。

最新更新