Ce que j'aimerais faire, c'est écrire juste des fichiers paresseux C ++ .LZz, puis avoir la course Lzz avant une construction pour générer des fichiers .cpp et .h qui seront intégrés à l'application finale, en quelque sorte comme le fonctionnement MOC avec Qt. p>
Y a-t-il un moyen de faire cela? P>
3 Réponses :
Pour faire:
sourcecode.h sourcecode.cpp: sourcecode.lzz <TAB>lazy-cpp sourcecode.lzz
J'apprécie l'aide, mais je me demandais comment procéder à cmake.
Mes excuses. Je pensais que Clake était une variante de fabrication. Je l'ai regardé, ce n'est pas le cas. Même approche requise, syntaxe différente. Bien que vous puissiez devenir vraiment paresseux et que vous avez un processus, cela dépend et invoquer la cmake.
Voici un exemple de comment faire cela ... Vous devez d'abord trouver le programme lzz code>, pour celui-ci Utilisez la commande
Find_Program code> Commande:
cmake_minimum_required(VERSION 2.8)
project(lazy_test)
find_program(LZZ_COMMAND lzz)
function(lazy_compile filename)
get_filename_component(base ${filename} NAME_WE)
set(base_abs ${CMAKE_CURRENT_BINARY_DIR}/${base})
set(output ${base_abs}.cpp ${base_abs}.h)
add_custom_command(
OUTPUT ${output}
COMMAND ${LZZ_COMMAND} -o ${CMAKE_CURRENT_BINARY_DIR} ${filename})
set_source_files_properties(${output} PROPERTIES GENERATED TRUE)
endfunction()
lazy_compile(${CMAKE_CURRENT_SOURCE_DIR}/example.lzz)
add_executable(test example.cpp example.h)
Merci, c'est ce que je cherchais.
Lorsque Cmake génère un projet Visual Studio, exemple.CPP et exemple.h apparaît dans l'explorateur de solution au lieu de l'exemple.LZZ. Est-il possible d'inverser cela?
Si l'on ajoute un dépend de $ {FileName} Code> Clause au
add_custom_command code> -Call Les fichiers source sont automatiquement régénérés si les fichiers LZZ changent.
La commande set_source_files_properties code> ne semble plus nécessaire en raison de ce qui suit dans la documentation de
add_custom_command code>: "Chaque fichier de sortie sera marqué par la propriété de fichier source générée automatiquement", se référant aux fichiers après la directive de sortie
Je voulais juste partager mes CMAKELIST.TXT, qui repose sur le script de Richq. Les fichiers *. .CPP et * .HPP dépendent désormais correctement sur les fichiers * .LZZ. Les fichiers * .LZZ sont ajoutés au projet (qui répond à la question de Absense ci-dessus) mais restait séparément des fichiers générés à l'aide de la commande Source_Group.
Le seul autre pépiteur pour moi est l'incapacité de compiler le fichier actuel de * .LZZ Fichiers. P>
cmake_minimum_required(VERSION 2.8) PROJECT(LzzTest) find_program(LZZ_COMMAND lzz.exe) # Syntax: # add_lzz_file(<output> <lzz file>) # Adds a build rule for the specified lzz file. The absolute paths of the generated # files are added to the <output> list. The files are generated in the binary dir. # # TODO: Support for generating template files etc. function(add_lzz_file output filename) # Only process *.lzz files get_filename_component(ext ${filename} EXT) if(NOT ext STREQUAL ".lzz") return() endif() set(header_extension "hpp") get_filename_component(base ${filename} NAME_WE) set(base_abs ${CMAKE_CURRENT_BINARY_DIR}/${base}) set(outfiles ${base_abs}.cpp ${base_abs}.${header_extension}) set(${output} ${${output}} ${outfiles} PARENT_SCOPE) #message("outfiles=${outfiles}, DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${filename}") add_custom_command( OUTPUT ${outfiles} COMMAND ${LZZ_COMMAND} -o ${CMAKE_CURRENT_BINARY_DIR} # output dir -hx ${header_extension} -sl -hl -il -tl -nl -x # insert #line commands w/ absolute paths -sd -hd -id -td -nd # don't output files that didn't change ${CMAKE_CURRENT_SOURCE_DIR}/${filename} DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${filename}" ) set_source_files_properties(${outfiles} PROPERTIES GENERATED TRUE) endfunction() include_directories(${CMAKE_CURRENT_BINARY_DIR}) set(SOURCES A.lzz B.lzz main.cpp ) foreach(file ${SOURCES}) add_lzz_file(GENERATED_SOURCES ${file}) endforeach() source_group("" FILES ${SOURCES}) source_group(generated FILES ${GENERATED_SOURCES}) add_executable(LzzTest ${SOURCES} ${GENERATED_SOURCES})