在VS构建事件中是否可以使用条件编译符号?

12
假设我有一个名为"MyConfig"的Visual Studio项目配置,并且我已经定义了编译符号MY_CONFIG_SYMBOL。那么,在预构建/后构建事件中,是否有宏或命令可以查看MY_CONFIG_SYMBOL是否被定义?类似于#if MY_CONFIG_SYMBOL,但用于构建事件?

1
找到答案了吗? - Thracx
@Thracx,我终于找到了答案。请看下面。 - Mike Webb
3个回答

14

我终于找到了答案。以下方法完美地解决了问题:

if "$(DefineConstants.Contains('DEBUG'))" == "True" <command>

这适用于构建中定义的任何常量,但请注意常量是区分大小写的('DEBUG'!='Debug')。


0

3
不,我的意思是使用在 Debug 或 Release 中定义的条件编译符号。对于 Debug 配置,通常默认情况下定义的主要条件编译符号是 DEBUG。您可以在代码中使用它,但是您可以在构建前或后事件中使用它吗? - Mike Webb

0

好的,这不是一个解决方案,只是试图通过分享一些实验来推进状态。 (我还没有找到测试条件编译符号的方法。)

这是一种整合调试开关的方法:

<#@ include file="debug.incl" #>`

some text1
<# if ( xdebug ) { #>
    foo = bas;
<# } #>
more text

其中 debug.incl 包含:

<# 
bool xdebug = true;
#>

第一个文件中的条件(if)能够看到xdebug的值,因此输出会根据debug.incl中的xdebug设置而改变。

然而,尽管明显包含了debug.incl,但输出文件在更改debug.incl时并未重新构建。即使进行了清理和重建,也似乎无法触发生成,因此需要一些单独的构建结构...

(我尝试过使用debug.tt而不是debug.incl,但没有成功,所以切换到.incl,以便debug.cs不会由debug.tt创建。)


这个并不是很好用,因为它无法识别条件编译符号,但实际上可以根据模板调试属性进行切换!

<#
#if DEBUG 
bool xdebug = true;
#else
bool xdebug = false;
#endif
#>

some text1
<# if ( xdebug ) { #>
    foo = bas;
<# } #>
more text

使用<#@ template debug="true" #><# template debug=false #>,分别可以得到有条件的输出或没有条件的输出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接