CMakeList从特定文件夹下的.proto文件生成.cc和.h文件

时间:2015-09-22 11:05:05

标签: cmake protocol-buffers

我的CMakeLists.txt文件中有以下CMakeList命令,我想在我的主文件夹下的src-gen文件夹下生成.cc和.h文件,其中src,{{ 1}}和其他东西是。我把命令看看是否有效,但它们仍然在include文件夹之外生成,所以它不起作用。

src-gen

有谁知道错误在哪里,或者在必要时我应该添加什么?

1 个答案:

答案 0 :(得分:6)

这来自FindProtobuf的限制。如果仔细查看此模块的documentation,可以找到以下行:

  

PROTOBUF_GENERATE_CPP宏和add_executable()或add_library()调用只能在同一目录中正常工作。

事实证明,您的路径设置无效的原因是您要相对于PROJECT_SOURCE_DIR设置路径。如果查看此模块的source,您会发现输出变量完全忽略了您设置的变量,并将内容写入CMAKE_CURRENT_BINARY_DIR

list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc")
list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h")

我在项目中使用的解决方案是将所有.proto文件放在一个目录中,在该目录中放置一个CMakeLists.txt,指定proto build命令。这样您就可以在proto文件夹上执行ADD_SUBDIRECTORY,并且您的CMAKE_CURRENT_BINARY_DIR将被正确设置。

这种方法还有一个好处,就是让你选择二进制目录。我认为像这样的电话会给你最接近你要求的东西。请注意,第二个参数已分配给binary_dirreference here):

ADD_SUBDIRECTORY (${PROTO_DIRECTORY} ${PROJECT_SOURCE_DIR}/src-gen)