Come compilare in modo condizionale le risorse VC6
-
10-07-2019 - |
Domanda
a seconda di un parametro di compilazione (i valori sono COMPILE_A
o COMPILE_B
), impostato sotto forma di una variabile di ambiente, desidero compilare la mia applicazione con impostazioni diverse, come il nome dell'applicazione e la schermata iniziale.
Sono arrivato così lontano:
-
In " Progetto / Impostazioni / C / C ++ / Definizioni preprocessore " Ho aggiunto
$(COMPILESWITCH)
(risultati nell'opzione della riga di comando/D "$(COMPILESWITCH)"
). -
In stdafx.h posso usare il seguente codice, il che significa che ho definito correttamente la definizione del preprocessore tramite il parametro della riga di 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
Ma ho notato il " Condizione " proprietà in " ResourceView / [tasto destro] / Proprietà " ... Il testo di aiuto dice questo:
CondizioneDetermina l'inclusione di la risorsa. Ad esempio, se il condizione è _DEBUG, questa risorsa sarebbe incluso solo nel debug costruisce.
Sembra il modo elegante di farlo, giusto?
Specificare _DEBUG
come funziona la condizione. Così come /D _DEBUG
è specificato tramite <=> anche il mio <=> dovrebbe funzionare, giusto?
Per qualche ragione non lo fa; perché?
O c'è anche un altro modo migliore per ottenere ciò che voglio?
Soluzione
Suppongo di aver appena risolto il mio problema ...
Il compilatore di risorse utilizza il proprio preprocessore.
Pertanto, la stessa definizione del preprocessore deve essere aggiunta in & Quot; Progetto / Impostazioni / Risorse / Definizioni preprocessore & Quot ;.
Modifica: risorse stringa
Quanto sopra non funziona per le risorse di stringa in quanto non hanno un " condizione " Proprietà ...
Ho scelto di utilizzare il res\<projectname>.rc2
file di risorse personalizzato che non verrà toccato dall'editor delle risorse.
Il contenuto è simile a questo
#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