2008-09-23 7 views
2

Je code C++ en utilisant MS Dev Studio et je travaille de la maison deux jours par semaine. J'utilise CVS pour garder mes sources synchronisées entre les deux ordinateurs, mais il y a des différences entre les environnements dans lesquels se trouvent les machines.Compilation conditionnelle pour travailler à la maison

Quelqu'un peut-il suggérer un moyen de modifier les constantes dans mon code de manière conditionnelle selon que je compile chez moi? boîte ou pas?

Ce que je suis après est une façon de définir un symbole, appelons-le _ATHOME, automatiquement, donc je peux le faire:

#ifdef _ATHOME 
# define TEST_FILES "E:\\Test" 
# define TEST_SERVER "192.168.0.1" 
#else 
# define TEST_FILE "Z:\\Project\\Blah\\Test" 
# define TEST_SERVER "212.45.68.43" 
#endif 

NB: Ceci est à des fins de développement et de débogage bien sûr, je voudrais ne publiez jamais de logiciel avec des constantes codées en dur comme celle-ci.

Répondre

6

Sur vos machines résidentielles et de travail, définissez une variable d'environnement LOCATION qui correspond à «1» pour la maison ou «2» pour le travail. Puis dans les options du préprocesseur, ajoutez un préprocesseur define/DLOCATION = $ (LOCATION). Cela évaluera soit la chaîne "home" ou "work" que vous définissez dans la variable d'environnement.

Puis dans votre code:

#if LOCATION==1 
    // home 
#else 
    // work 
#endif 
+0

Brillant, c'est exactement ce que je cherchais. Je peux probablement utiliser une technique similaire sur Linux aussi. –

2

Vous pouvez définir des variables de preproccesor dans le Propriétés-> C++ -> préprocesseur
en milieu visual studio vous pouvez utiliser $ (enviromentvariable)

+0

Désolé mgb, même si votre réponse est essentiellement la même, 1800 informations, la réponse est mieux formulée et comprend un exemple, donc je vais accepter celui-là. –

1

J'utilise généralement les fichiers de configuration, puis il suffit de créer un lien symbolique vers le approprié configuration.

3

Si la seule différence entre le travail et la maison est l'endroit où les fichiers de test sont situés ... alors (à mon humble avis), vous ne devriez pas souiller vos fichiers de construction avec un tas de chemins statiques & IPs.

Pour l'exemple que vous avez montré, je voudrais simplement mapper les lecteurs sur le travail et la maison. C'est à dire. au travail mappent un lecteur T: qui pointe vers \\ 212.45.68.43 \ Project \ Blah \ Test, à la carte de la maison un lecteur T: qui pointe vers \\ 192.168.0.1 \ Test.

Ensuite, votre processus de construction utilise le chemin "T: \" pour faire référence à l'emplacement des tests.

Bien sûr, si vous avez besoin de changer quelque chose de plus radical, la définition de variables d'environnement est probablement la meilleure solution.

Questions connexes