Utilisation de cmake pour créer principal et des sous-projets, et être en mesure de compiler séparément

AVERTISSEMENT: je suis nouvelle CMakeLists.txt j'ai un travail de mise en œuvre et souhaite améliorer et de renforcer, problème décrit ci-dessous:

Si je veux root/sub-directories/ comme sous-projets distincts, qui peut être compilé à l'aide de la personne CMakeLists.txts dans leurs dossiers, je me retrouve littéralement le copier-coller presque la totalité de fichiers racine CMakeLists.txt par sous-répertoire.

Je me demandais si il ya une meilleure façon d'avoir un projet principal et ensuite des sous-projets partagés dépendances de projet principal et peut être compilé sans cmake-ing la racine CMakeLists.txt. Ma structure de répertoire est;

CMakeLists.txt (racine du projet)
| __ sub_dir-1
| __ | __ CMakeLists.txt (sous-projet)
| __ sub_dir-2
| __ | __ CMakeLists.txt (sous-projet)
| __ sub_dir-3
| __ | __ CMakeLists.txt (sous-projet)
...

Essentiellement, je veux être en mesure de:

  1. cmake root/CMakeLists.txt, ce qui crée un ensemble du projet qui comprend les sous-projets (j'ai déjà cette mise en œuvre à l'aide des CMakeLists.txts à l'intérieur des sous-répertoires.
  2. cmake root/sub-dir/CMakeLists.txt et seulement compiler le sous-projet, qui, pour l'essentiel retrouve aussi les dépendances nécessaires et comprend de peut-être .cmake comprend ou root/CMakeLists.txt. Quelle est la meilleure façon d'aborder cette structure;
    • tout en conservant le premier point d'avoir la capacité de le compiler en tant que l'ensemble d'un projet.
    • Et aussi de ne pas encombrement la sub-dir/CMakeLists.txt trop avec le code redondant?

Apprécier toutes les suggestions! Merci.

Il existe de nombreuses façons de réduire le copier-coller: include(), function()/macro(), variables. Vous pouvez avoir des sous-projet conscient, qu'ils soient construire seul ou en tant que partie de la racine d'un projet via la vérification des variables/cibles/fonctions et prendre les mesures appropriées. Juste essayer de programmer ce que vous voulez.
Il y a une grande différence entre être capable de configurer (cmake) projet individuellement et être en mesure de compiler (make) individuellement. Mon expérience est que vous pouvez obtenir assez loin par l'exécution de cmake om le répertoire supérieur, puis spécifiez ce que vous voulez construire avec faire: cmake <root-dir>; make sub-project1. Ce qui est le plus important pour vous?
les deux sont important, vraiment, je veux être en mesure de les configurer à l'aide de cmake et puis compiler à l'aide de make comme des sous-projets ainsi que d'un projet principal.
Je sais qu'il y a de nombreuses façons, j'espérais que quelqu'un pourrait m'indiquer un moyen efficace, comme je l'ai répertorié quelques restrictions, que j'aimerais vous satisfaire. Vous n'auriez pas un exemple de ce dont je pourrais suivre?
Efficacité de l'une ou l'autre approche hautement dépend de la situation concrète vous avez. L'approche la plus efficace pour une situation serait trop compliqué dans d'autres situations. Fournir certains (simplifié) du code, qui est similaire entre la racine de votre projet et de sous-projet, et je (ou quelqu'un d'autre) vous montrent le chemin, vous pouvez réduire la duplication de code.

OriginalL'auteur Blizzard | 2016-03-01