Question

En fonction d'un commutateur de compilation (les valeurs sont COMPILE_A ou COMPILE_B), défini sous la forme d'une variable d'environnement, je souhaite compiler mon application avec des paramètres différents, tels que le nom de l'application et l'écran de démarrage.

Je suis si loin que ça:

  1. Dans " Projet / Paramètres / C / C ++ / Définitions du préprocesseur " J'ai ajouté $(COMPILESWITCH) (entraîne l'option de ligne de commande /D "$(COMPILESWITCH)").

  2. Dans stdafx.h, je peux utiliser le code suivant, ce qui signifie que j'ai correctement défini la définition du préprocesseur via le paramètre de ligne de commande:


    #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

Mais j'ai remarqué le " Condition " propriété sous & "ResourceView / [clic droit] / Propriétés &"; ... Le texte d'aide dit ceci:

  État      

Détermine l'inclusion de   la ressource. Par exemple, si le   condition est _DEBUG, cette ressource   serait inclus uniquement dans le débogage   construit.

Cela ressemble à la façon élégante de le faire, non?

Spécifier _DEBUG comme condition fonctionne. Donc, comme /D _DEBUG est spécifié via <=> mon <=> devrait également fonctionner, non?
Pour une raison quelconque, ce n'est pas le cas. pourquoi?

Ou y a-t-il même une autre meilleure façon de réaliser ce que je veux?

Était-ce utile?

La solution

Je suppose que je viens de résoudre mon problème ...

Le compilateur de ressources utilise son propre préprocesseur.
Par conséquent, la même définition de préprocesseur doit être ajoutée sous & Quot; Projet / Paramètres / Ressources / Définitions du préprocesseur & Quot;.

Modifier: ressources de chaîne

Ce qui précède ne fonctionne pas pour les ressources chaîne car elles n'ont pas de " condition " propriété ...

J'ai choisi d'utiliser le res\<projectname>.rc2 fichier de ressources personnalisé, qui ne sera pas modifié par l'éditeur de ressources. Le contenu ressemble à ceci

#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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top