web-dev-qa-db-fra.com

Appel de la commande make existante dans le fichier cmake

J'ai un grand projet avec plusieurs sous-répertoires. Dans le répertoire parent, j'ai un fichier CMakeLists.txt qui appelle les fonctions définies dans d'autres fichiers cmake dans le même répertoire parent. J'ai un Makefile personnalisé dans l'un des sous-répertoires qui contient un "run" cible. Lorsque j'appelle cmake depuis le répertoire parent, je veux que la cible "run" située dans le sous-répertoire makefile s'exécute. Comment dois-je procéder? Je comprends que certaines personnes ont suggéré d'utiliser add_custom_target et add_custom_command, mais je ne sais toujours pas comment appliquer ces commandes pour accomplir cette tâche.

10
imgolden62

Si vous savez quels fichiers sont produits par Makefile dans le sous-répertoire et que vous souhaitez dépendre de ces fichiers, utilisez add_custom_command:

add_custom_command(OUTPUT <output-file>
                   COMMAND make run
                   WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/<subdir>
)

Cela suppose que votre CMakeLists.txt ont une cible, qui dépend ou utilise un fichier donné.

Sinon, si vous ne vous souciez pas des fichiers produits par Makefile, utilisez add_custom_target:

add_custom_target(<target_name> COMMAND make run
                   WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/<subdir>
)

Dans les deux cas WORKING_DIRECTORY spécifie le répertoire qui doit être current pour la commande exécutée.

Si vous souhaitez que la cible (dans le second cas) soit exécutée par défaut, ajoutez l'option ALL avant la commande .

19
Tsyvarev