La solution add_custom_target(run ALL ...
fonctionnera pour les cas simples lorsque vous avez une seule cible que vous êtes bâtiment, mais se décompose lorsque vous avez plusieurs cibles de niveau supérieur, par exemple application et tests.
J'ai rencontré ce même problème lorsque j'essayais de regrouper certains fichiers de données de test dans un fichier objet afin que mes tests unitaires ne dépendent d'aucun élément externe. Je l'ai résolu en utilisant add_custom_command
et une magie de dépendance supplémentaire avec set_property
.
add_custom_command(
OUTPUT testData.cpp
COMMAND reswrap
ARGS testData.src > testData.cpp
DEPENDS testData.src
)
set_property(SOURCE unit-tests.cpp APPEND PROPERTY OBJECT_DEPENDS testData.cpp)
add_executable(app main.cpp)
add_executable(tests unit-tests.cpp)
Alors maintenant testData.cpp sera généré avant est compilé unité tests.cpp, et tout le temps testData.src changements. Si la commande que vous appelez est vraiment lente, vous obtenez le bonus supplémentaire que lorsque vous construisez juste la cible de l'application, vous n'aurez pas à attendre pour cette commande (dont seul l'exécutable de tests a besoin) pour terminer.
Ce n'est pas montré ci-dessus, mais une application soigneuse de ${PROJECT_BINARY_DIR}, ${PROJECT_SOURCE_DIR} and include_directories()
maintiendra votre arborescence source propre des fichiers générés.
add_custom_target [pourrait] (http://stackoverflow.com/a/15973676/704244) être une alternative à add_custom_command –