我的CMakeLists.txt文件中有以下CMakeList命令,我想在我的主文件夹下的src-gen
文件夹下生成.cc和.h文件,其中src
,{{ 1}}和其他东西是。我把命令看看是否有效,但它们仍然在include
文件夹之外生成,所以它不起作用。
src-gen
有谁知道错误在哪里,或者在必要时我应该添加什么?
答案 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_dir
(reference here):
ADD_SUBDIRECTORY (${PROTO_DIRECTORY} ${PROJECT_SOURCE_DIR}/src-gen)