web-dev-qa-db-fra.com

Comment ajouter des fichiers de pré-traitement (macros) à QT Creator?

Dans Eclipse, il existe une option pour spécifier des définitions de prétraitement (macros #ifdef) à un projet en utilisant l'option Symboles dans Chemins et symboles. Cela aide à une indexation efficace du code qui est multiplateforme. Existe-t-il une option pour les fournir dans Qt creator?

34
Bharathwaaj

Depuis Documentation QT :

Les définitions sont spécifiées dans le fichier .config. Le fichier .config est un fichier C++ standard, ajouté à tous vos fichiers source lors de leur analyse. Utilisez uniquement le fichier .config pour ajouter des lignes comme dans l'exemple ci-dessous:

#define NAME value

Autrement dit, si vous importez un projet nommé MyProject, les définitions du pré-processeur doivent être spécifiées dans MyProject.config

Pour mes projets, l'indexeur reconnaît cette définition de l'ensemble du projet et modifie l'auto-complétion pour refléter cela.

17
Gus E

Ça dépend:-)

Ce qui suit suppose que vous utilisez des projets basés sur qmake:

Vous pouvez d'abord ajouter DEFINES += SOME_DEFINE=value dans votre fichier .pro. Cela est récupéré dans le créateur et lors de la construction sur la ligne de commande et devrait également apparaître lors de la création d'un projet MSVC ou XCode à partir du fichier .pro.

Ensuite, vous pouvez ajouter DEFINES += SOME_DEFINE=value à l'appel qmake que Qt Creator émettra lors de la configuration du projet. Cela se produit dans le mode projet, les paramètres de construction, les étapes QMake.

Enfin, vous pouvez mettre #define SOME_DEFINE valoriser les privilèges dans un fichier d'en-tête et les inclure. Cela fonctionne pour toutes sortes de projets :-)

37
Tobias Hunger

Je voulais spécifier une chaîne #define dans le fichier .pro, mais mon code s'est retrouvé avec le contenu de la chaîne sans les guillemets. J'ai dû échapper aux guillemets, puis échapper aux échappées pour obtenir une paire de guillemets pour durer jusqu'à mon code. En effet, qmake supprime un ensemble d'échappements et de guillemets, puis la ligne de commande supprime les autres. Cela a fonctionné pour moi:

DEFINES += "VERSION=\"\\\"0.1.0\\\"\""

Sous Windows, cette chaîne de VERSION peut ensuite être utilisée dans le fichier .rc pour créer les éléments de version là où Windows le souhaite et ainsi que dans le code d'un menu "À propos".

7
Brandon

Je pense que les réponses initiales sont bonnes, mais elles nécessitent que vous gériez votre configuration - manuellement alors qu'il existe des moyens de laisser le IDE gérer cela pour vous automatiquement selon que vous avez une configuration release ou debug sélectionnée.

Ce bit peut être redondant, mais veuillez noter que cela fonctionnera pour vous uniquement si vous utilisez le IDE pour la construction. Évidemment, si ce n'est pas le cas, vous aurez besoin d'une solution différente.

Pas

Étant donné que les images valent mille mots, voici un exemple de la façon dont vous définissez une macro de débogage pour votre build de débogage à l'aide de Qt Creator 4.3.1:

  1. Assurez-vous que votre configuration de débogage est sélectionnée;

Run Configurations

  1. Allez dans la section Projets du menu de gauche;
  2. Accédez à la section Build

Projects >> Build

  1. Sous Étapes de construction , recherchez la zone de saisie Arguments supplémentaires ;
  2. Entrez vos définitions de macro (par exemple DEBUG pour votre #ifdef DEBUGs dans le code; dans mon cas, c'est __CTS_DEBUG__)

Additional Arguments

La macro ne sera désormais définie que lorsque vous utilisez votre configuration de débogage; lorsque vous choisissez votre version config (voir l'étape 1), elle ne sera pas définie automatiquement et votre code de débogage compilé conditionnellement sera supprimé, comme indiqué dans le photos ci-dessous, ce qui est exactement ce que vous avez toujours voulu.

Résultats

Avec la configuration debug sélectionnée

Debug Config

Avec la configuration release sélectionnée:

Release Config

5
code_dredd

Vous pouvez définir un PREPROCESSEUR dans les paramètres du projet dans QtCreator. Je n'ai pas QtCreator ici mais je me souviens qu'il y a un onglet pour la configuration du projet.

1
Patrice Bernassola

La première suggestion de la réponse de @Tobias Hunger a fonctionné pour moi. Je faisais cela dans mon fichier .pro:

DEFINE += KEY=value

qui n'a pas fonctionné jusqu'à ce que je le change en:

DEFINES += KEY=value

Cela dit, si vous voulez tout faire depuis la ligne de commande, une solution presque hybride qui n'utilise pas l'interface graphique de Qt Creator, mais utilise des fichiers .pro, est décrite ici:

https://www.linux.org/threads/c-tutorial-create-qt-applications-without-qtcreator.18409/

En utilisant la méthode décrite dans le lien ci-dessus, vous pouvez utiliser qtcreator -project pour produire un .pro fichier, puis utilisez notepad ou vim ou un autre éditeur de texte pour ajouter le DEFINES += KEY=value ligne vers le .pro fichier que vous venez de créer. Utilisez ensuite qmake ainsi: qmake <your_project>.pro, pour faire le prétraitement Qt, et enfin juste make pour construire un exécutable.

J'ai également entendu parler d'un qtcreator -D option pour ajouter des définitions de préprocesseur à partir de la ligne de commande comme décrit ici: https://doc.qt.io/archives/qt-4.8/qmake-variable-reference.html#defines mais je ' Je ne l'ai jamais essayé.

J'espère que quelque chose fonctionne pour vous! Votre dévouement à la CLI est admirable.

0
23r0c001