【问题标题】:Is it possible to use conditional compilation symbols in VS build events?是否可以在 VS 构建事件中使用条件编译符号?
【发布时间】:2012-08-25 09:12:23
【问题描述】:

例如,我有一个 Visual Studio 项目,其配置名为“MyConfig”,并且定义了编译符号 MY_CONFIG_SYMBOL

是否有宏或命令可以查看是否在构建前/构建后事件中定义了MY_CONFIG_SYMBOL#if MY_CONFIG_SYMBOL 之类的东西,但是对于构建事件?

【问题讨论】:

  • 有没有找到答案的运气?
  • @Thracx 我终于找到了答案。见下文。

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    如果您的意思是基于构建类型(调试或发布)的条件构建,那么可以。查看这些主题:

    Conditional Post-build event in Visual Studio 2008

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

    【讨论】:

    • 不,我的意思是使用调试或发布中定义的条件编译符号。对于 Debug 配置,通常默认定义的主要条件编译符号是 DEBUG。您可以在代码中使用它,但您可以在构建前或构建后事件中使用它
    【解决方案3】:

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

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

    <#@ 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.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
    

    &lt;#@ template debug="true" #&gt;&lt;# template debug=false #&gt; 分别获得条件输出与否。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多