Pregunta

dependiendo de un conmutador de compilación (los valores son COMPILE_A o COMPILE_B), que se configura en forma de una variable de entorno, quiero compilar mi aplicación con diferentes configuraciones, como el nombre de la aplicación y la pantalla de presentación.

Llegué hasta aquí:

  1. En " Proyecto / Configuración / C / C ++ / Definiciones de preprocesador " Agregué $(COMPILESWITCH) (resultados en la opción de línea de comando /D "$(COMPILESWITCH)").

  2. En stdafx.h puedo usar el siguiente código, lo que significa que definí correctamente la definición del preprocesador a través del parámetro de línea 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

Pero he notado la " Condición " propiedad debajo de " ResourceView / [clic derecho] / Propiedades " ... El texto de ayuda dice esto:

  Condición      

Determina la inclusión de   El recurso. Por ejemplo, si el   la condición es _DEBUG, este recurso   se incluiría solo en la depuración   compilaciones.

Esta parece la forma elegante de hacerlo, ¿verdad?

Especificando _DEBUG como la condición funciona. Entonces, como /D _DEBUG se especifica a través de <=> mi <=> también debería funcionar, ¿verdad?
Por alguna razón no lo hace; por qué?

¿O hay alguna otra forma mejor de lograr lo que quiero?

¿Fue útil?

Solución

Creo que acabo de resolver mi problema ...

El compilador de recursos usa su propio preprocesador.
Por lo tanto, se debe agregar la misma definición de preprocesador en & Quot; Proyecto / Configuración / Recursos / Definiciones de preprocesador & Quot ;.

Editar: recursos de cadena

Lo anterior no funciona para los recursos de cadena ya que no tienen una " condición " propiedad ...

Elegí usar el res\<projectname>.rc2 archivo de recursos personalizado que el editor de recursos no tocará. El contenido se ve así

#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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top