我使用 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
目录中。问:有没有办法为自定义目标设置输出目录?
只是为了了解在
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
我还没有测试过这段代码,但从文档来看这应该可以工作