1

根据以环境变量的形式设置的编译开关(值为COMPILE_ACOMPILE_B),我想用不同的设置编译我的应用程序,例如应用程序名称和启动画面。

我做到了这一点:

  1. 在“项目/设置/C/C++/预处理器定义”中,我添加了$(COMPILESWITCH)(命令行选项中的结果/D "$(COMPILESWITCH)")。

  2. 在 stdafx.h 我可以使用以下代码,这意味着我通过命令行参数正确定义了预处理器定义:


    #if defined COMPILE_A
    #   define IDB_SPLASH IDB_SPLASH_A
    # elif defined COMPILE_B
    #   define IDB_SPLASH IDB_SPLASH_B
    # else
    #   error Unknown or undefined target compile switch; cannot compile!
    # endif

但我注意到“ResourceView / [右键单击] / Properties”下的“Condition”属性......帮助文本说:

健康)状况

确定资源的包含。例如,如果条件是 _DEBUG,则此资源将仅包含在调试版本中。

这看起来很优雅,对吧?

指定_DEBUG为条件有效。因此,_DEBUG通过/D _DEBUG我的指定$(COMPILESWITCH)也应该工作,对吧?
出于某种原因,它没有;为什么?

或者还有另一种更好的方法来实现我想要的吗?

4

1 回答 1

2

我想我刚刚解决了我的问题......

资源编译器使用自己的预处理器。
因此,必须在“项目/设置/资源/预处理器定义”下添加相同的预处理器定义。

编辑:字符串资源

以上不适用于字符串资源,因为它们没有“条件”属性......

我选择使用res\<projectname>.rc2资源编辑器不会触及的自定义资源文件。内容看起来像这样

#如果定义(COMPILE_A)
    可丢弃的字符串
    开始
        IDR_MAINFRAME "应用标题 A"
    结尾
#别的
# 如果定义(COMPILE_B)
    可丢弃的字符串
    开始
        IDR_MAINFRAME "应用标题 B"
    结尾
# 别的
# 错误编译开关未定义或未知;无法编译!
# 万一
#万一
于 2009-03-12T10:00:38.200 回答