Как я делаю правила сборки в cmake для предварительной обработки ленивого C++ .lzz файлы, которые генерируют.h и .cpp файлы?

То, что я хотел бы сделать, записать просто Ленивый C++ .lzz файлы и затем иметь lzz, выполненный перед сборкой для генерации .cpp и.h файлов, которые будут встроены в заключительное приложение, вид подобных, как MOC работает с QT.

Там какой-либо путь состоит в том, чтобы сделать это?

8
задан jjacksonRIAB 21 April 2010 в 23:00
поделиться

2 ответа

Вот пример того, как это сделать. .. Сначала вам нужно найти программу 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, это будет немного чище. Но это основная идея.

8
ответ дан 5 December 2019 в 12:57
поделиться

Для make:

sourcecode.h sourcecode.cpp: sourcecode.lzz
<TAB>lazy-cpp sourcecode.lzz

заполните sourcecode.h, sourcecode.cpp и lazy-cpp правильными значениями. Я их не знаю.

0
ответ дан 5 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: