L'exécution d'une commande bash via CMake
J'essaie d'avoir CMake exécuter trois commandes bash ou un script bash. Cependant, je n'arrive pas à le faire fonctionner.
Les commandes bash sont:
cd ${CMAKE_SOURCE_DIR}/dependencies/library
make
cd ${CMAKE_BINARY_DIR}
Essentiellement, je voudrais CMake pour la construction de la bibliothèque dans ce répertoire s'il n'existe pas déjà.
Voici le CMake code que j'ai essayé:
if(NOT "${CMAKE_SOURCE_DIR}/dependencies/library/lib.o")
execute_process(COMMAND cd ${CMAKE_SOURCE_DIR}/dependencies/library)
execute_process(COMMAND make)
execute_process(COMMAND cd ${CMAKE_BINARY_DIR})
endif(NOT "${CMAKE_SOURCE_DIR}/dependencies/library/lib.o")
Cependant, il n'est pas de construire quelque chose. Ce que je fais mal?
Aussi, alors je suis ici pour demander ceci: si le troisième commande, déplacez-vous dans le dossier binaire, être inclus?
Merci!
Tout d'abord pourquoi n'êtes-Vous pas à l'aide de
Je ne peux pas commenter sur la plupart de ce @Kamiccolo dit, mais je peux dire que je pense que le détail sur
Si vous avez l'intention de construire une bibliothèque tierce, vous êtes probablement mieux d'utiliser le ExternalProject module.
WORKING_DIRECTORY
paramètre à la place de ceux cd
commandes?Quelque chose comme execute_process(COMMAND make WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/dependencies/library)
. Je suppose que, execute_process()
appels ne partage pas le même environnement. Aussi, si j'étais Vous, je voudrais vérifier le add_custom_target()
et add_custom_command()
pour ce genre de chose.Je ne peux pas commenter sur la plupart de ce @Kamiccolo dit, mais je peux dire que je pense que le détail sur
execute_process
pas l'état de partage est presque certainement juste. C'est incroyablement probable que le cd
dans la première commande permet de changer de répertoire seulement pour que processus et non pour tous les autres.Si vous avez l'intention de construire une bibliothèque tierce, vous êtes probablement mieux d'utiliser le ExternalProject module.
OriginalL'auteur assignment_operator | 2014-09-05
Vous devez vous connecter pour publier un commentaire.
execute_process()
est exécutée au cours de configurer l'heure. Mais vous voulez que ce à courir au moment de la construction, ainsiadd_custom_command()
etadd_custom_target()
est ce que vous cherchez.Dans ce cas spécial, vous voulez générer un fichier de sortie, de sorte que vous devrait aller pour
add_custom_command()
(les deux sont essentiellement les mêmes, maiscommand
produit un ou plusieurs fichiers de sortie, tandis quetarget
ne pas.Le cmake extrait de ce qui devrait ressembler à quelque chose comme ce qui suit:
Vous devez ajouter le fichier de sortie dans une autre cible que la dépendance, et tout devrait (on l'espère) fonctionnent comme prévu.
Vous pouvez également ajouter
DEPENDS
des déclarations à laadd_custom_command()
appel pour reconstruire le fichier d'objet dans le cas où certaines sources d'entrée ont changé.OriginalL'auteur Phil Be