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

时间:2012-08-30 15:23:30

标签: visual-studio-2010 conditional-compilation build-events

比如说我有一个名为" MyConfig"的配置的Visual Studio项目。我已经定义了编译符号MY_CONFIG_SYMBOL

是否有宏或命令来查看是否在前/后构建事件中定义了MY_CONFIG_SYMBOL?类似于#if MY_CONFIG_SYMBOL,但是对于构建事件?

3 个答案:

答案 0 :(得分:6)

我终于找到了答案。以下工作完美:

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

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

答案 1 :(得分:0)

如果你的意思是基于构建类型(Debug或Release)的条件构建,那么是。看看这些主题:

Conditional Post-build event in Visual Studio 2008

How to run Visual Studio post-build events for debug build only

答案 2 :(得分: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的更改时重建。甚至一个干净的&amp; rebuild似乎没有触发生成,因此需要一些单独的构建结构......

(我确实尝试使用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 #>分别获得条件输出。