gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:31:36 24 4
gpt4 key购买 nike

我的 CMakeLists.txt 文件中有以下 CMakeList 命令,我想在 src-gen 下生成 .cc 和 .h 文件位于我的主文件夹下的文件夹,其中 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 的限制.如果你仔细看documentation对于此模块,您可以找到以下行:

The PROTOBUF_GENERATE_CPP macro and add_executable() or add_library() calls only work properly within the same directory.



事实证明,您的路径设置不起作用的原因是您正在设置相对于 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 构建命令。这样你就可以做到 ADD_SUBDIRECTORY在 proto 文件夹上,以及您的 CMAKE_CURRENT_BINARY_DIR会适当设置。

这种方法还具有让您选择二进制目录的好处。我认为这样的电话会给你最接近你所要求的东西。注意第二个参数分配给 binary_dir ( reference here):
ADD_SUBDIRECTORY (${PROTO_DIRECTORY} ${PROJECT_SOURCE_DIR}/src-gen)

关于CMakeList 从特定文件夹下的 .proto 文件生成 .cc 和 .h 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32715225/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com