ist ein Beispiel dafür, wie dies zu tun ... Zuerst müssen Sie die lzz
Programm finden, denn das ist die find_program
Befehl verwenden:
find_program(LZZ_COMMAND lzz)
Dies setzt LZZ_COMMAND
auf den Pfad des Compilers. Dann mit einem CMake benutzerdefinierten Befehl der LZZ Datei an ihre C++ Header/Implementierungsdateien kompilieren:
add_custom_command(
OUTPUT ${output}
COMMAND ${LZZ_COMMAND} -o ${CMAKE_CURRENT_BINARY_DIR} ${filename})
, dass die Dateien im aktuellen Build-Verzeichnis erzeugt, Sie im Fall tun out-of-Source-Builds. Sie müssen auch angeben, dass die Ausgänge Dateien erzeugt werden:
set_source_files_properties(${output} PROPERTIES GENERATED TRUE)
setzen, die alle zusammen und Sie eine CMakeLists.txt Datei etwas wie diese:
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)
Sie würden wahrscheinlich auch hinzufügen möchten Fügen Sie Pfad und andere Optionen zu lzz hinzu. Wenn Sie all das Lazy C++ - Zeug in eine Moduldatei gelegt und das aus der CMakeLists.txt aufgenommen haben, wäre es etwas sauberer. Aber das ist die Grundidee.
Danke, das ist genau das, was ich gesucht habe. – jjacksonRIAB
Wenn CMake ein Visual Studio-Projekt generiert, werden example.cpp und beispiel.h im Lösungsexplorer anstelle von example.lzz angezeigt. Ist es möglich, das umzukehren? – absence
Wenn man dem 'add_custom_command'-Aufruf eine' DEPEND $ {filename} '- Klausel hinzufügt, werden die Quelldateien automatisch neu generiert, wenn sich die lzz-Dateien ändern. – Sunday