То, что я хотел бы сделать, записать просто Ленивый C++ .lzz файлы и затем иметь lzz, выполненный перед сборкой для генерации .cpp и.h файлов, которые будут встроены в заключительное приложение, вид подобных, как MOC работает с QT.
Там какой-либо путь состоит в том, чтобы сделать это?
Вот пример того, как это сделать. .. Сначала вам нужно найти программу lzz
, для этого используйте команду find_program
:
find_program(LZZ_COMMAND lzz)
Это устанавливает LZZ_COMMAND
как путь к компилятору. Затем используйте специальную команду CMake для компиляции файла LZZ в их файлы заголовков / реализации C ++:
add_custom_command(
OUTPUT ${output}
COMMAND ${LZZ_COMMAND} -o ${CMAKE_CURRENT_BINARY_DIR} ${filename})
Это создает файлы в текущем каталоге сборки на случай, если вы выполняете сборки вне исходного кода. Вам также нужно будет указать, что выходные данные являются сгенерированными файлами:
set_source_files_properties(${output} PROPERTIES GENERATED TRUE)
Сложите все это вместе, и вы получите файл CMakeLists.txt примерно так:
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)
Вы, вероятно, также захотите добавить путь включения и другие параметры в lzz в конечном итоге . Если вы поместите все содержимое Lazy C ++ в файл модуля и включите его из CMakeLists.txt, это будет немного чище. Но это основная идея.
Для make:
sourcecode.h sourcecode.cpp: sourcecode.lzz
<TAB>lazy-cpp sourcecode.lzz
заполните sourcecode.h, sourcecode.cpp и lazy-cpp правильными значениями. Я их не знаю.