Articles

Dans cmake, qu’est-ce qu’un  » projet  » ?

Un projet regroupe logiquement un certain nombre de cibles (c’est-à-dire des bibliothèques, des exécutables et des étapes de construction personnalisées) dans une collection autonome qui peut être construite seule.

En pratique, cela signifie que si vous avez une commande project dans un CMakeLists.txt, vous devriez pouvoir exécuter CMake à partir de ce fichier et le générateur devrait produire quelque chose qui peut être construit. Dans la plupart des bases de code, vous n’aurez qu’un seul projet par build.

Notez cependant que vous pouvez imbriquer plusieurs projets. Un projet de niveau supérieur peut inclure un sous-répertoire qui est à son tour un autre projet autonome. Dans ce cas, la commande project introduit une portée supplémentaire pour certaines valeurs. Par exemple, la variable PROJECT_BINARY_DIR pointera toujours vers le répertoire binaire racine du projet en cours. Comparez cela avec CMAKE_BINARY_DIR, qui pointe toujours vers le répertoire binaire du projet de niveau supérieur. Notez également que certains générateurs peuvent générer des fichiers supplémentaires pour des projets. Par exemple, les générateurs Visual Studio créeront un fichier de solution .sln pour chaque sous-projet.

Utilisez des sous-projets si votre base de code est très complexe et que vous avez besoin que les utilisateurs puissent construire certains composants isolément. Cela vous donne un mécanisme très puissant pour structurer le système de construction. En raison de l’augmentation des frais de codage et de maintenance nécessaires pour rendre les différents sous-projets vraiment autonomes, je conseillerais de ne suivre cette voie que si vous avez un cas d’utilisation réel. Diviser la base de code en différentes cibles devrait toujours être le mécanisme préféré pour structurer la construction, tandis que les sous-projets devraient être réservés aux rares cas où vous avez vraiment besoin de rendre un sous-ensemble de cibles autonome.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.