Cómo compilar condicionalmente recursos VC6
-
10-07-2019 - |
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í:
-
En " Proyecto / Configuración / C / C ++ / Definiciones de preprocesador " Agregué
$(COMPILESWITCH)
(resultados en la opción de línea de comando/D "$(COMPILESWITCH)"
). -
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ónDetermina 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?
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