取决于编译开关(值为COMPILE_A
或COMPILE_B
),这是以envorinment变量的形式设置的,我想用不同的设置编译我的应用程序,比如应用程序名称和启动屏幕。
我到目前为止:
在“项目/设置/ C / C ++ /预处理器定义”中,我添加了$(COMPILESWITCH)
(生成命令行选项/D "$(COMPILESWITCH)"
)。
在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 / [右键单击] /属性”下的“条件”属性... 帮助文本说明了这一点:
条件确定包含 资源。例如,如果 条件是_DEBUG,这个资源 将仅包含在调试中 生成。
这看起来很优雅,对吧?
在条件有效的情况下指定_DEBUG
。因此_DEBUG
通过/D _DEBUG
指定,$(COMPILESWITCH)
也应该有效,对吧?
出于某种原因,它没有;为什么呢?
或者是否还有另一种更好的方式来实现我想要的目标?
答案 0 :(得分:2)
我想我刚刚解决了我的问题...
资源编译器使用自己的预处理器 因此,必须在“项目/设置/资源/预处理器定义”下添加相同的预处理器定义。
上述内容不适用于字符串资源,因为它们没有“条件”属性...
我选择使用资源编辑器不会触及的res\<projectname>.rc2
自定义资源文件。
内容看起来像这样
#if defined(COMPILE_A) STRINGTABLE DISCARDABLE BEGIN IDR_MAINFRAME "AppTitle A" END #else # if defined(COMPILE_B) STRINGTABLE DISCARDABLE BEGIN IDR_MAINFRAME "AppTitle B" END # else # error Compile switch not defined or unknown; cannot compile! # endif #endif