Sur cette page

Création de fichiers de projet

Les fichiers de projet contiennent toutes les informations requises par qmake pour compiler votre application, votre bibliothèque ou votre plugin. En général, vous utilisez une série de déclarations pour spécifier les ressources du projet, mais la prise en charge de constructions de programmation simples vous permet de décrire différents processus de compilation pour différentes plateformes et différents environnements.

Éléments du fichier de projet

Le format de fichier de projet utilisé par qmake permet de prendre en charge aussi bien des systèmes de compilation simples que relativement complexes. Les fichiers de projet simples utilisent un style déclaratif direct, définissant des variables standard pour indiquer les fichiers source et d'en-tête utilisés dans le projet. Les projets complexes peuvent utiliser des structures de contrôle de flux pour affiner le processus de compilation.

Les sections suivantes décrivent les différents types d’éléments utilisés dans les fichiers de projet.

Variables

Dans un fichier de projet, les variables servent à contenir des listes de chaînes de caractères. Dans les projets les plus simples, ces variables indiquent à qmake les options de configuration à utiliser, ou fournissent les noms de fichiers et les chemins d’accès à utiliser dans le processus de compilation.

qmake recherche certaines variables dans chaque fichier de projet et utilise leur contenu pour déterminer ce qu’il doit écrire dans un Makefile. Par exemple, les listes de valeurs contenues dans les variables HEADERS et SOURCES servent à indiquer à qmake les fichiers d’en-tête et de source se trouvant dans le même répertoire que le fichier de projet.

Les variables peuvent également être utilisées en interne pour stocker des listes de valeurs temporaires, et les listes de valeurs existantes peuvent être écrasées ou complétées par de nouvelles valeurs.

L'extrait de code suivant illustre comment des listes de valeurs sont attribuées à des variables :

HEADERS = mainwindow.h paintwidget.h

La liste de valeurs d’une variable est étendue de la manière suivante :

SOURCES = main.cpp mainwindow.cpp \
          paintwidget.cpp
CONFIG += console

Remarque : la première affectation n’inclut que les valeurs spécifiées sur la même ligne que la variable ` HEADERS `. La deuxième affectation répartit les valeurs de la variable ` SOURCES ` sur plusieurs lignes à l’aide d’une barre oblique inversée (\).

La variable CONFIG est une autre variable spéciale que qmake utilise lors de la génération d’un Makefile. Elle est abordée dans la section Configuration générale. Dans l’extrait ci-dessus, console est ajouté à la liste des valeurs existantes contenues dans CONFIG.

Le tableau suivant répertorie certaines variables fréquemment utilisées et décrit leur contenu. Pour obtenir la liste complète des variables et leurs descriptions, consultez la section « Variables ».

VariableContenu
CONFIGOptions générales de configuration du projet.
DESTDIRRépertoire dans lequel le fichier exécutable ou binaire sera placé.
FORMSListe des fichiers d'interface utilisateur à traiter par le User Interface Compiler (uic).
HEADERSListe des noms de fichiers d'en-tête (.h) utilisés lors de la compilation du projet.
QTListe des modules Qt utilisés dans le projet.
RESSOURCESListe des fichiers de ressources (.qrc) à inclure dans le projet final. Consultez la section « Le système de ressources Qt » pour plus d'informations sur ces fichiers.
SOURCESListe des fichiers de code source à utiliser lors de la compilation du projet.
MODÈLELe modèle à utiliser pour le projet. Celui-ci détermine si le résultat du processus de compilation sera une application, une bibliothèque ou un plugin.

Le contenu d'une variable peut être lu en faisant précéder le nom de la variable de l'opérateur « $$ ». Cela permet d'affecter le contenu d'une variable à une autre :

TEMP_SOURCES = $$SOURCES

L'opérateur « $$ » est largement utilisé avec les fonctions intégrées qui opèrent sur des chaînes de caractères et des listes de valeurs. Pour plus d'informations, consultez la section « Langage qmake ».

Espaces

En général, les espaces séparent les valeurs dans les affectations de variables. Pour spécifier des valeurs contenant des espaces, vous devez les placer entre guillemets doubles :

DEST = "Program Files"

Le texte entre guillemets est traité comme un élément unique dans la liste des valeurs contenues par la variable. Une approche similaire est utilisée pour les chemins d’accès contenant des espaces, en particulier lors de la définition des variables INCLUDEPATH et LIBS pour la plate-forme Windows :

win32:INCLUDEPATH += "C:/mylibs/extra headers"
unix:INCLUDEPATH += "/home/user/extra headers"

Commentaires

Vous pouvez ajouter des commentaires aux fichiers de projet. Les commentaires commencent par le caractère « # » et se poursuivent jusqu’à la fin de la même ligne. Par exemple :

# Comments usually start at the beginning of a line, but they
# can also follow other content on the same line.

Pour inclure le caractère « # » dans des affectations de variables, il est nécessaire d’utiliser le contenu de la variable intégrée LITERAL_HASH.

Fonctions intégrées et flux de contrôle

qmake fournit un certain nombre de fonctions intégrées permettant de traiter le contenu des variables. La fonction la plus couramment utilisée dans les fichiers de projet simples est la fonction include(), qui prend un nom de fichier en argument. Le contenu du fichier indiqué est inclus dans le fichier de projet à l’endroit où la fonction ` include ` est utilisée. La fonction ` include ` est le plus souvent utilisée pour inclure d’autres fichiers de projet :

include(other.pro)

La prise en charge des structures conditionnelles est assurée par des portées qui se comportent comme des instructions « if » dans les langages de programmation :

win32 {
    SOURCES += paintwidget_win.cpp
}

Les affectations situées entre accolades ne sont effectuées que si la condition est vraie. Dans ce cas, l’option CONFIG de la commande ` win32 ` doit être définie. Cela se fait automatiquement sous Windows. L’accolade ouvrante doit figurer sur la même ligne que la condition.

Des opérations plus complexes sur les variables, qui nécessiteraient habituellement des boucles, sont fournies par des fonctions intégrées telles que `find()`, ` unique()` et `count()`. Ces fonctions, ainsi que de nombreuses autres, permettent de manipuler des chaînes de caractères et des chemins d’accès, de prendre en charge les entrées utilisateur et d’appeler des outils externes. Pour plus d’informations sur l’utilisation de ces fonctions, consultez la section « Langage qmake ». Pour obtenir la liste de toutes les fonctions et leurs descriptions, consultez les sections « Fonctions de remplacement » et « Fonctions de test ».

Modèles de projet

La variable TEMPLATE sert à définir le type de projet qui sera construit. Si elle n’est pas déclarée dans le fichier de projet, qmake suppose qu’il s’agit de construire une application et génère un Makefile (ou fichier équivalent) adapté à cet effet.

Le tableau suivant récapitule les types de projets disponibles et décrit les fichiers que qmake générera pour chacun d’entre eux :

ModèleSortie qmake
app (par défaut)Fichier Makefile permettant de compiler une application.
libFichier Makefile permettant de compiler une bibliothèque.
auxFichier Makefile ne servant à rien. Utilisez-le si aucun compilateur ne doit être appelé pour créer la cible, par exemple parce que votre projet est écrit dans un langage interprété.

Remarque : ce type de modèle n'est disponible que pour les générateurs basés sur Makefile. Il ne fonctionnera notamment pas avec les générateurs vcxproj et Xcode.

subdirsMakefile contenant des règles pour les sous-répertoires spécifiés à l’aide de la variable SUBDIRS. Chaque sous-répertoire doit contenir son propre fichier de projet.
vcappFichier de projet Visual Studio permettant de compiler une application.
vclibFichier de projet Visual Studio permettant de créer une bibliothèque.
vcsubdirsFichier de solution Visual Studio permettant de compiler des projets dans des sous-répertoires.

Consultez la section « Création de types de projets courants » pour obtenir des conseils sur la rédaction de fichiers de projet destinés aux projets utilisant les modèles « app » et « lib ».

Lorsque le modèle subdirs est utilisé, qmake génère un Makefile afin d’examiner chaque sous-répertoire spécifié, de traiter tout fichier de projet qu’il y trouve et d’exécuter l’outil make de la plate-forme sur le Makefile nouvellement créé. La variable SUBDIRS contient la liste de tous les sous-répertoires à traiter.

Configuration générale

La variable CONFIG spécifie les options et les fonctionnalités avec lesquelles le projet doit être configuré.

Le projet peut être compilé en mode « release » ou en mode « debug », ou les deux. Si « debug » et « release » sont tous deux spécifiés, c’est le dernier qui prévaut. Si vous spécifiez l’option debug_and_release pour compiler à la fois les versions « debug » et « release » d’un projet, le Makefile généré par qmake inclut une règle qui compile les deux versions. Celle-ci peut être invoquée de la manière suivante :

make all

L’ajout de l’option « build_all » à la variable « CONFIG » fait de cette règle la valeur par défaut lors de la compilation du projet.

Remarque : chacune des options spécifiées dans la variable ` CONFIG ` peut également être utilisée comme condition de portée. Vous pouvez vérifier la présence de certaines options de configuration à l’aide de la fonction intégrée `CONFIG()`. Par exemple, les lignes suivantes montrent comment utiliser cette fonction comme condition dans une portée pour vérifier si seule l’option ` opengl ` est utilisée :

CONFIG(opengl) {
    message(Building with OpenGL support.)
} else {
    message(OpenGL support is not available.)
}

Cela permet de définir des configurations différentes pour les builds « release » et « debug ». Pour plus d’informations, consultez la section Utilisation des portées.

Les options suivantes définissent le type de projet à construire.

Remarque : certaines de ces options ne prennent effet que lorsqu’elles sont utilisées sur la plateforme concernée.

OptionDescription
qtLe projet est une application Qt et doit être lié à la bibliothèque Qt. Vous pouvez utiliser la variable ` QT ` pour contrôler les modules Qt supplémentaires requis par votre application. Cette valeur est ajoutée par défaut, mais vous pouvez la supprimer pour utiliser qmake avec un projet non-Qt.
x11Le projet est une application ou une bibliothèque X11. Cette valeur n'est pas nécessaire si la cible utilise Qt.

Les modèles de projet d'application et de bibliothèque vous offrent des options de configuration plus spécialisées pour affiner le processus de compilation. Ces options sont expliquées en détail dans la section « Compilation des types de projets courants ».

Par exemple, si votre application utilise la bibliothèque Qt et que vous souhaitez la compiler en mode « debug », votre fichier de projet contiendra la ligne suivante :

CONFIG += qt debug

Remarque : vous devez utiliser « += » et non « = », sinon qmake ne pourra pas utiliser la configuration de Qt pour déterminer les paramètres nécessaires à votre projet.

Déclaration des bibliothèques Qt

Si la variable CONFIG contient la valeur « qt », la prise en charge des applications Qt par qmake est activée. Cela permet de choisir précisément les modules Qt utilisés par votre application. Pour ce faire, on utilise la variable QT, qui permet de déclarer les modules d'extension requis. Par exemple, nous pouvons activer les modules XML et réseau de la manière suivante :

QT += network xml

Remarque : la valeur « QT » inclut par défaut les modules « core » et « gui » ; la déclaration ci-dessus ajoute donc les modules réseau et XML à cette liste par défaut. L’affectation suivante omet les modules par défaut et entraînera des erreurs lors de la compilation du code source de l’application :

QT = network xml # This will omit the core and gui modules.

Si vous souhaitez compiler un projet sans le module gui, vous devez l’exclure à l’aide de l’opérateur « -= ». Par défaut, QT contient à la fois core et gui; la ligne suivante permettra donc de compiler un projet Qt minimal :

QT -= gui # Only the core module is used.

Pour obtenir la liste des modules Qt que vous pouvez ajouter à la variable QT, consultez la section QT.

Fonctionnalités de configuration

qmake peut être configuré avec des fonctionnalités supplémentaires spécifiées dans des fichiers de fonctionnalités (.prf). Ces fonctionnalités supplémentaires offrent souvent une prise en charge des outils personnalisés utilisés pendant le processus de compilation. Pour ajouter une fonctionnalité au processus de compilation, ajoutez le nom de la fonctionnalité (la racine du nom du fichier de fonctionnalité) à la variable CONFIG.

Par exemple, qmake peut configurer le processus de compilation pour tirer parti des bibliothèques externes prises en charge par pkg-config, telles que les bibliothèques D-Bus et ogg, à l'aide des lignes suivantes :

CONFIG += link_pkgconfig
PKGCONFIG += ogg dbus-1

Pour plus d’informations sur l’ajout de fonctionnalités, consultez la section « Ajout de nouvelles fonctionnalités de configuration ».

Déclaration d’autres bibliothèques

Si vous utilisez d’autres bibliothèques dans votre projet en plus de celles fournies avec Qt, vous devez les spécifier dans votre fichier de projet.

Les chemins d’accès dans lesquels qmake recherche les bibliothèques, ainsi que les bibliothèques spécifiques à lier, peuvent être ajoutés à la liste des valeurs de la variable LIBS. Vous pouvez spécifier les chemins d’accès aux bibliothèques ou utiliser la notation de type Unix pour spécifier les bibliothèques et les chemins d’accès.

Par exemple, les lignes suivantes montrent comment spécifier une bibliothèque :

LIBS += -L/usr/local/lib -lmath

Les chemins d'accès contenant les fichiers d'en-tête peuvent également être spécifiés de manière similaire à l'aide de la variable INCLUDEPATH.

Par exemple, pour ajouter plusieurs chemins de recherche des fichiers d’en-tête :

INCLUDEPATH = c:/msdev/include d:/stl/include

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.