Comment ajouter des fichiers source dans un autre dossier
Je suis en utilisant cmake pour construire mon projet en C++. Supposons que j'ai les répertoires suivants sur mon dossier Source
Source
|_Dir1
| |_Class.cpp
| |_Class.hpp
|
|_Dir2
|_Main.cpp
Dans Dir1 il y a une classe avec son en-tête et les fichiers de mise en œuvre (Class.cpp et la Classe.ppr).
Dans Dir2 il y a le principal de l'application qui utilise la classe de Dir1
Quelle est la bonne façon de dire au CMakeLists dans Dir2 pour construire l'exécutable avec Dir1/Class.cpp fichier?
EDIT: Pour être plus précis, je veux définir que le fichier source pour Class.cpp doit être utilisé dans Dir1 de l'CMakeLists.txt et pas dans Dir2 de l'. Faire de l'autre la façon dont se sent mal de plaine pour moi et c'est difficile à utiliser, donc si il y a une raison qu'ils sont l'application de me faire quelques précisions sur le sujet, ce serait bien.
Ce que je suis en train de faire est de coder en dur la Class.cpp l'emplacement du fichier dans Dir2/CMakeLists.txt mais ça ne marche pas quand j'ai un tas de classes interagissent ensemble.
- Vous pouvez utiliser le
FILE(GLOB ...)
l'action afin de recueillir un tas de fichiers avec une extension particulière. - Mais ne pas travailler uniquement à l'intérieur de Dir2? Je veux utiliser le fichier cpp dans Dir1. J'ai particulièrement envie de ne pas avoir à spécifier tous les fichiers dans le dossier exécutable du CMakeLists mais faire de chaque dossier enregistrer le cpp elle l'a fait.
- double possible de CMake - ajouter Automatiquement tous les fichiers dans un dossier à une cible?
- Vous pouvez utiliser le
RELATIVE
option pour spécifier quel répertoire vous voulez. Ce sujet de recherche dans CMake manuel de l'? - Je ne suis pas sûr de comprendre ce que la fonction relative n'. Êtes-vous sûr de ce qui m'aide en quelque sorte à définir les fichiers source pour mon exécutable à partir d'un autre dossier?
- Vous devez juste créer 2 ensembles de noms de fichier source et les ajouter à la fois à votre
ADD_EXECUTABLE
. - Soit j'ai eu la très fondements de CMake mal ou je ne suis pas la compréhension de ce que vous me dites à tous. Pourriez-vous être plus précis sur ce que doit je faire?
- J'ai posté une réponse expliquant ce que je veux dire en détail.
Vous devez vous connecter pour publier un commentaire.
Supposé que vous avez une seule
CMakeLists.txt
fichier à laSource
répertoire, vous devez créer deux variables à l'aide de différentsfile()
commandeset ajouter les deux ensembles générés par le
file()
des commandes à votre cible de la liste source:Vous pouvez également placer un
CMakeLists.txt
fichier sousDir1
etDir2
(Principale) à la recherche comme suitpour ajouter des sous-répertoires en plus (statique) des bibliothèques lié à votre cible principale.
CMakeLists.txt
àSource
niveau. Eh bien, si vous pourriez aussi place desCMakeLists.txt
fichiers dans le (non principal) sous-répertoires à construire des bibliothèques, et les ajouter avecadd_subdirectory()
, mais comme vous l'avez mentionné, ce n'est pas la façon habituelle de simplement recueillir à partir des sources.add_executable
doit venir avanttarget_link_libraries
, sinon cmake va se plaindre.file(GLOB Dir1_Sources RELATIVE "Dir1" "*.cpp")
en cours d'exécution dansCMakeLists.txt
, ne pas collecter sources dansDir1/
sous-répertoire. Appel Correct seraitfile(GLOB Dir1_Sources "Dir1/*.cpp")
.