我有以下CMakeList命令在我的CMakeLists.txt文件,我想生成的.cc和下.h文件src-gen
夹这是在我的主文件夹,在那里src
,include
和其他的东西都是。我放入命令以查看它们是否起作用,但是它们仍在src-gen
文件夹外部生成,因此它不起作用。
include(FindProtobuf)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
set_source_files_properties(${PROTO_SRC} ${PROTO_HEADER} PROPERTIES GENERATED TRUE)
set(PROTO_SRC ${PROTO_SRC} ${PROJECT_SOURCE_DIR}/src-gen) #does not work..
set(PROTO_HEADER ${PROTO_HEADER} ${PROJECT_SOURCE_DIR}/src-gen)#does not work..
find_package(Protobuf REQUIRED)
PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS proto/VisionData.proto)
include_directories(
${PROTOBUF_INCLUDE_DIRS}
include
)
add_executable(cameraSubscriber src/main.cpp ${PROTO_SRCS} ${PROTO_HDRS})
target_link_libraries(cameraSubscriber
${PROTOBUF_LIBRARIES}
)
有谁知道错误在哪里,或者如果有必要我应该添加什么?
这来自的限制FindProtobuf
。如果仔细阅读此模块的文档,则会发现以下行:
PROTOBUF_GENERATE_CPP宏和add_executable()或add_library()调用只能在同一目录中正常工作。
事实证明,您的路径设置不起作用的原因是您要相对于设置路径PROJECT_SOURCE_DIR
。如果您查看此模块的源代码,则会发现输出变量完全忽略了您正在设置的变量,并将其写入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命令。这样,您可以ADD_SUBDIRECTORY
在proto文件夹上进行操作,并且CMAKE_CURRENT_BINARY_DIR
将进行适当的设置。
这种方法还具有让您选择二进制目录的好处。我认为像这样的电话会给您最接近您所要求的东西。请注意,第二个参数已分配给binary_dir
(在此处参考):
ADD_SUBDIRECTORY (${PROTO_DIRECTORY} ${PROJECT_SOURCE_DIR}/src-gen)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句