fichiers, produit par générateurs source-fichiers (comme gpref
) sont rarement nécessaires en mode autonome. Au lieu de cela, ces fichiers sources sont généralement utilisés pour créer des exécutables ou des bibliothèques dans un projet.
Ainsi, le modèle standard de l'utilisation des générateurs de fichiers source dans le CMake ressemble:
# Call add_custom_command() with appropriate arguments for generate output file
# Note, that *gperf* will work in the build tree,
# so for file in the source tree full path should be used.
function(gperf_generate_new input output)
add_custom_command(
OUTPUT ${output}
COMMAND gperf -L c++ ${input} > ${output}
DEPENDS ${input}
COMMENT "Generate ${output}" # Just for nice message during build
)
endfunction()
# Generate *example.hpp* file ...
gperf_generate_new(${CMAKE_CURRENT_SOURCE_DIR}/command_options.new.gperf example.hpp)
# ... for use it in executable
add_executable(my_program ${CMAKE_CURRENT_BINARY_DIR}/example.hpp <other sources>)
Si vous voulez seulement vérifier si example.hpp
est la génération, au lieu de add_executable()
utilisation
add_custom_target(my_target
ALL # Force target to be built with default build target.
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/example.hpp
)
Remarque , cette liaison entre add_custom_command
et add_custom_target
est exprimée en utilisant le même nom de fichier dans leurs options OUTPUT
et DEPENDS
de manière correspondante. Avec un tel ordre de lien de ces commandes est insignifiant (mais les deux commandes doivent être appelées à partir du même script CMakeLists.txt
).
Cochez [this] (http://stackoverflow.com/questions/2354473/cmake-add-custom-command?rq=1) et [this] (http://stackoverflow.com/questions/17696872/cmake -add-commande-personnalisée-qui-est-exécutée-sur-chaque-construction? rq = 1) Q/As. Probablement votre question est un doublon. – user3159253
Un problème avec votre fichier CMakeLists.txt est que vous utilisez des options incorrectes pour 'add_custom_command': l'option' SOURCE' est complètement sans rapport avec cette commande, 'OUTPUTS' devrait être' OUTPUT' et ne devrait pas être mélangé avec l'option 'TARGET' ('OUTPUT' et' TARGET' sont utilisés pour * différents flux * de cette commande). ** CMake [documentation] (https://cmake.org/cmake/help/cmake2.6docs.html#section_Commands) décrit précisément les signatures de la commande **, pas besoin de deviner quelle option supplémentaire peut prendre telle ou telle commande. – Tsyvarev