В отличие от 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)