Вот пример того, как это сделать ... Сначала вам нужно найти программу 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)
Вы, возможно, также захотите добавить include-путь и другие опции в lzz. Если вы поместите весь материал Lazy C ++ в файл модуля и включите его в CMakeLists.txt, это будет немного чище. Но это основная идея.