Frage

in Abhängigkeit von einem Kompilierung-Schalter (Werte sind COMPILE_A oder COMPILE_B), die in Form einer envorinment Variable gesetzt ist, möchte ich meine Anwendung mit unterschiedlichen Einstellungen kompilieren, wie Anwendungsname und Splash-Screen.

Ich habe so weit:

  1. "Projekt / Einstellungen / C / C ++ / Preprocessor Definitionen" Ich habe $(COMPILESWITCH) (Ergebnisse in Befehlszeilenoption /D "$(COMPILESWITCH)").

  2. In stdafx.h kann ich den folgenden Code verwenden, was bedeutet, dass ich korrekt die Präprozessordefinition über die Befehlszeilenparameter definiert:


    #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

Aber ich habe die „Bedingung“ Eigenschaft unter „Resource / [Rechtsklick] / Eigenschaften“ bemerkt ... Der Hilfetext sagt dieser:

  Bedingung      

Bestimmt die Einbeziehung von   die Ressource. Zum Beispiel, wenn die   Bedingung ist _DEBUG, diese Ressource   würde nur im Debug enthalten sein   baut.

Das sieht aus wie die elegante Art und Weise, es zu tun, nicht wahr?

Einzelheiten enthält _DEBUG als Bedingung funktioniert. So wie _DEBUG über /D _DEBUG angegeben ist mein $(COMPILESWITCH) sollte auch funktionieren, oder?
Aus irgendeinem Grund hat es nicht; warum?

Oder gibt es noch andere, bessere Art und Weise zu erreichen, was ich will?

War es hilfreich?

Lösung

Ich glaube, ich gelöst gerade mein Problem ...

Der Ressource-Compiler verwendet seinen eigenen Präprozessor.
Deshalb ist die gleiche Präprozessordefinition unter „Projekt / Einstellungen / Ressourcen / Preprocessor Definitionen“ hinzugefügt werden muss.

Edit: String-Ressourcen

Das oben funktioniert nicht für String-Ressourcen, da sie keine „Bedingung“ Eigenschaft haben ...

Ich wählte die res\<projectname>.rc2 benutzerdefinierte Ressource-Datei zu verwenden, die von dem Ressource-Editor berührt werden nicht. Der Inhalt sieht wie folgt aus

#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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top