Ecco un esempio di come fare questo ... In primo luogo è necessario trovare il programma lzz
, per tale uso il comando find_program
:
find_program(LZZ_COMMAND lzz)
Questa imposta LZZ_COMMAND
al percorso del compilatore. Quindi utilizzare un comando personalizzato CMake per compilare il file LZZ ai loro file header C++/implementazione:
add_custom_command(
OUTPUT ${output}
COMMAND ${LZZ_COMMAND} -o ${CMAKE_CURRENT_BINARY_DIR} ${filename})
che genera i file nella directory di compilazione corrente, nel caso in cui si fa out-of-source build. Sarà inoltre necessario specificare che le uscite sono file generati:
set_source_files_properties(${output} PROPERTIES GENERATED TRUE)
Metti che tutti insieme e si ottiene un file CMakeLists.txt qualcosa di simile:
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)
E 'probabile che anche voler aggiungere includere il percorso e altre opzioni per lzz eventualmente. Se hai inserito tutte le cose di Lazy C++ in un file di modulo e l'hai incluso da CMakeLists.txt, sarebbe un po 'più pulito. Ma questa è l'idea di base.
Grazie, questo è proprio quello che stavo cercando. – jjacksonRIAB
Quando CMake genera un progetto di Visual Studio, example.cpp e example.h vengono visualizzati in solution explorer anziché example.lzz. È possibile invertire questo? – absence
Se si aggiunge una clausola 'DEPEND $ {filename}' alla chiamata 'add_custom_command', i file di origine vengono rigenerati automaticamente se i file lzz cambiano. – Sunday