2017-10-10 5 views
0

Par exemple, si un fichier « Paramètres » existe et a les éléments suivants:Comment faire pour que le préprocesseur #if soit conditionnel à des valeurs dans un autre fichier différent?

system,ubuntu

peut préprocesseur #if être utilisé pour personnaliser le code en fonction des valeurs dans le fichier de paramètres? Par exemple:

#if lookup_system == "ubuntu" // loopup_system is pseudocode

Une autre utilisation peut pourrait être de rechercher si oui ou non le code est en cours d'exécution sur les serveurs de production.

+2

Ceci n'est possible que si le fichier "settings" est analysé par le système de construction, qui ajoute les macros correctes lors de la construction. Rappelez-vous que le préprocesseur est une chose * compile-time * seulement. –

Répondre

0

Vous ne pouvez pas faire cela.

Toutefois, vous pouvez générer un fichier d'en-tête à partir de données externes. L'utilitaire autoconf le fait (génère en fait un script configure qui génère un tel en-tête).

Plus généralement, vous devez configurer votre système build automation (par exemple modifier votre Makefile pour GNU make ou votre build.ninja pour ninja) pour générer le fichier d'en-tête convenablement (peut-être avec un script minuscule, votre propre programme C++ -another-, ou peu importe). Vous pouvez également avoir un système de construction intelligent en passant un -D flags spécifique à votre compilateur.

Rappelez-vous que C++ fichiers (fichiers d'en-tête par exemple .hh et les fichiers de mise en œuvre par exemple .cc ...) peuvent être générés par autre chose. C'est une pratique courante.

En savoir plus sur votre preprocessor, par ex. environ cpp. C'est une seule chose de compilation. Avec GCC vous pouvez obtenir le formulaire prétraité foo.ii de votre fichier foo.cc avec une commande such as
g++ -C -E foo.cc > foo.ii.