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:

  1. In " Progetto / Impostazioni / C / C ++ / Definizioni preprocessore " Ho aggiunto $(COMPILESWITCH) (risultati nell'opzione della riga di comando /D "$(COMPILESWITCH)").

  2. 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:

  Condizione      

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

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top