我有一个大型解决方案(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,这看起来越来越麻烦。所以我的问题是:我该怎么做?最初的想法:
- 有没有办法在编译时使用类似
-p:PreprocessorDefinitions=OLDGUI
的东西来将添加到现有的预处理器定义中 - 有没有办法在一个配置下为所有项目添加一个全局属性页,这样我就可以在那里定义
OLDGUI
- 有没有办法在编译时将全局属性页添加到所有项目中,以执行与(2(相同的操作
在2013年的这个答案中找到了解决方案。这是一个黑客,但它会的。
https://stackoverflow.com/a/14206134/9691276
我采取的方法是:
将$(ExternalPreprocessorDefinitions)
添加到C++>每个项目继承的全局属性页中的预处理器(这是预先存在的(。
在构建管道中,只需设置环境变量ExternalPreprocessorDefinitions=OLDGUI
。
沃伊拉。