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:

  1. Em "Projeto / Configurações / C / C ++ / Preprocessor Definitions" Eu adicionei $(COMPILESWITCH) (resultados em linha de comando opção /D "$(COMPILESWITCH)").

  2. 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ça

Determina 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?

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top