Como compilar condicionalmente VC6 recursos
-
10-07-2019 - |
Pergunta
dependendo de um interruptor de compilação (valores são COMPILE_A
ou COMPILE_B
), que é definido na forma de uma variável envorinment, quero compilar meu aplicativo com configurações diferentes, como nome do aplicativo e tela inicial.
I chegou até aqui:
-
Em "Projeto / Configurações / C / C ++ / Preprocessor Definitions" Eu adicionei
$(COMPILESWITCH)
(resultados em linha de comando opção/D "$(COMPILESWITCH)"
). -
Em stdafx.h eu posso usar o código a seguir, o que significa que foi definido correctamente a definição de pré-processamento através do parâmetro de linha de comando:
#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
Mas eu tenho notado a propriedade "Condição" em "/ [clique com o botão direito] ResourceView / Propriedades" ... O texto de ajuda diz o seguinte:
DoençaDetermina a inclusão de o recurso. Por exemplo, se o condição é _DEBUG, este recurso seriam incluídos apenas na depuração constrói.
Isto parece a maneira elegante de fazê-lo, certo?
especificando _DEBUG
como obras de condição. Assim como _DEBUG
é especificado via /D _DEBUG
minha $(COMPILESWITCH)
também deve funcionar, certo?
Por alguma razão isso não acontece; por quê?
Ou há mesmo outra maneira melhor, para conseguir o que eu quero?
Solução
Eu acho que eu só resolveu o meu problema ...
O compilador de recurso usa seu próprio pré-processador.
Portanto, a mesma definição pré-processador tem de ser adicionado sob "Projeto / Configurações / Recursos / Preprocessor Definitions".
Editar: Recursos corda
A descrição acima não funciona para recursos de cordas como eles não têm uma "condição" propriedade ...
Eu escolhi usar o arquivo de recurso personalizado res\<projectname>.rc2
que não vai ser tocado pelo editor de recursos.
Os olhares de conteúdo como este
#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