Как включить внешний генератор кода в CMake? - PullRequest
0 голосов
/ 07 апреля 2019

Я изучал CMake, пытаясь понять это.Из того, что я понимаю, действительно хорошо комбинировать пакеты C ++.

Однако я не понимаю, как включить в него генераторы кода.С GNU Makefiles я написал бы простое правило:

%.h: %.fbs
    flatc ... $< -o $@

Как мне написать такое же правило в CMake?

1 Ответ

2 голосов
/ 07 апреля 2019

В отличие от Make, CMake не имеет ни паттернов правил, ни автоматических переменных , которые расширяются в соответствии с текущей target или командой .

Вместо этого CMake позволяет определить функцию или макрос, который инкапсулирует создание target или команды с соответствующим содержимым.

Ваша команда может быть заключена в следующую функцию:

function(add_fbs_header name)
  add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${name}.h
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${name}.fbs
    COMMAND flatc ${CMAKE_CURRENT_SOURCE_DIR}/${name}.fbs -o ${CMAKE_CURRENT_BINARY_DIR}/${name}.h
    )
endfunction(add_fbs_header name)

с использованием использования:

# equivalent to
#   flatc <source_dir>/foo.fbs -o <binary_dir>/foo.h
# with proper dependencies and output.
add_fbs_header(foo)

Кстати, функциональность для генерации файлов заголовков с использованием flatbuffers уже предусмотрена в FindFlatBuffers.cmake скрипте, который поставляется с пакетом FlatBuffers.


Для сценария включения FindXXX.cmake используйте find_package(XXX).

Команда, созданная с помощью add_custom_command, будет выполняться только тогда, когда какая-либо цель (или другая команда) зависит от ВЫХОДА команды. Например. заданным образом:

add_fbs_header(foo)
add_executable(my_exe my.cpp foo.h)
...