如何使用 cmake 将 protobuffer 文件转换为 c++,输出文件与 proto 文件位于同一目录中

问题描述 投票:0回答:1

我使用 cmake 从 protobuf 文件生成 c++ 文件,如下

find_package(Protobuf REQUIRED)

file(GLOB PROTO_FILES *.proto)

protobuf_generate_cpp(CPP_SOURCE_FILES PROTO_HEADERS ${PROTO_FILES})
add_custom_target(PROTO_TO_CPP ALL DEPENDS ${CPP_SOURCE_FILES})

这按预期工作。问题是输出 c++ 文件是在

build
目录中生成的,我希望它们与 protobuf 文件位于同一目录中。我已经尝试了以下方法,根据文档,应该可以工作

set_target_properties(PROTO_TO_CPP
    RUNTIME_OUTPUT_DIRECTORY
    ${CMAKE_CURRENT_SOURCE_DIR})

但是c++文件仍然生成在

build
目录中。问:有没有办法为自定义目标设置输出目录?

c++ cmake protocol-buffers
1个回答
0
投票

只是为了了解在

source
目录中生成它们的目的是什么?

我认为这是不好的做法,因为

cmake
允许进行源代码之外的构建,并且生成的文件不应被视为“项目的源代码”。

如果您的自定义目标不“运行”任何内容,则它永远不会移动文件。它仅取决于

protobuf_generate_cpp
生成的一些文件。

我认为,如果您确实需要它们与

.proto
文件一起使用,您可以这样使用
protobuf_generate

protobuf_generate(
    TARGET 
        protobuf-generate-cpp
    PROTOS
        ${PROTO_FILES}
    LANGUAGE
        cpp
    OUT_VAR
        PROTOBUF_GENERATED_FILES
    PROTOC_OUT_DIR
        <path/to/proto/dir>
 )

最后我想你必须有另一个目标可以依靠

protobuf-generate-cpp

我还没有测试过这段代码,但从文档来看这应该可以工作

© www.soinside.com 2019 - 2024. All rights reserved.