我一直在研究CMake试图理解它。据我所知,它非常适合组合C ++包。
但是,我没有看到如何将代码生成器包含在其中。使用GNU Makefiles,我会写一个简单的规则:
%.h: %.fbs
flatc ... $< -o $@
如何在CMake中编写相同的规则?
与Make不同,CMake既没有模式规则也没有根据当前目标或命令扩展的自动变量。
相反,CMake允许定义一个函数或宏,它封装了目标或具有相应内容的命令的创建。
您的命令可以包含在以下函数中:
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)
BTW,一个使用flatbuffers生成头文件的功能已在FindFlatBuffers.cmake脚本中提供,该脚本随FlatBuffers包一起提供。
要包括FindXXX.cmake
脚本,请使用find_package(XXX)
。
使用add_custom_command
创建的命令仅在某些目标(或其他命令)取决于命令的OUTPUT时执行。例如。以给定的方式:
add_fbs_header(foo)
add_executable(my_exe my.cpp foo.h)