Créer un répertoire dans CMake


143

Dans CMake, je souhaite créer un répertoire s'il n'existe pas déjà. Comment puis-je faire ceci?

Réponses:


250

Quand souhaitez-vous créer le répertoire?

Lors de la génération du système de construction

Pour créer un répertoire lorsque CMake génère le système de construction,

file(MAKE_DIRECTORY ${directory})

Au moment de la construction

Dans la add_custom_command()commande (qui ajoute une règle de construction personnalisée au système de construction généré) et dans la add_custom_target()commande (qui ajoute une cible sans sortie afin qu'elle soit toujours construite), vous spécifiez les commandes à exécuter au moment de la construction. Créez un répertoire en exécutant la commande ${CMAKE_COMMAND} -E make_directory. Par exemple:

add_custom_target(build-time-make-directory ALL
    COMMAND ${CMAKE_COMMAND} -E make_directory ${directory})

Au moment de l'installation

Pour créer un répertoire au moment de l'installation,

install(DIRECTORY DESTINATION ${directory})

Succès et rapide. Frappe la cible tout de suite! Merci.
truthadjustr

25

Pour créer un répertoire au moment de l'installation,

install(DIRECTORY DESTINATION ${directory})

Ceux-ci fonctionneront tous les deux au moment de la configuration:

file(MAKE_DIRECTORY ${directory})
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${directory})

Pour créer pendant la construction, utilisez une cible personnalisée:

add_custom_target(mytargetname ALL COMMAND ${CMAKE_COMMAND} -E make_directory ${directory})

10

En plus de la réponse de Chin Huang, vous pouvez également le faire au moment de la construction avec add_custom_command:

add_custom_command(TARGET ${target_name} PRE_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory ${directory})

Vous pouvez également changer le moment où votre répertoire est créé avec PRE_BUILD| PRE_LINK| POST_BUILDparamètres.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.