gpt4 book ai didi

cmake - 如何在/include和/src目录下自动移动* .pb.h和* .pb.h?

转载 作者:行者123 更新时间:2023-12-04 17:09:25 25 4
gpt4 key购买 nike

我正在开发一个使用Google Protocol Buffer (protobuf)和CMake的库。该项目具有以下目录树。

MyProject/
MyProject/include/myproject/
MyProject/include/myproject/some_classes.h
MyProject/src/
MyProject/src/some_classes.cc
MyProject/src/foo.proto
MyProject/CMakeList.txt
CMakeList.txt具有以下几行来生成protobuf源文件和头文件。
include_directories(${libCHEC_SOURCE_DIR}/include)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SOURCES)

find_package(Protobuf REQUIRED)
file(GLOB ProtoFiles "${CMAKE_CURRENT_SOURCE_DIR}/src/*.proto")
protobuf_generate_cpp(ProtoSources ProtoHeaders ${ProtoFiles})
list(APPEND EXTLIBS ${PROTOBUF_LIBRARIES})

add_library(MyLibrary SHARED ${SOURCES} ${ProtoSources})
target_link_libraries(MyLibrary ${EXTLIBS})

当我执行 cmake时,在构建目录(即执行 foo.pb.h的目录)下生成 foo.pb.cccmake。看来这是默认行为。但是我想将 foo.pb.hfoo.pb.cc分别放在 include/myprojectsrc目录下。

如何更改 protoc生成的文件的位置?

最佳答案

我强烈建议不要将生成的文件放在源代码树中。

CMake在分离构建树和源代码树上付出了很多努力。强制它放弃这种分离有几个缺点。其中最突出的事实是,版本控制将必须处理源树中未经版本控制的生成文件,此外,不再可能具有针对共享同一源树的不同体系结构的多个构建。

更好的方法是将文件保留在二进制树中,并相应地调整target_include_directories。将二进制树中生成的文件用作源文件不会感到羞耻,因此请不要犹豫。

关于cmake - 如何在/include和/src目录下自动移动* .pb.h和* .pb.h?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26147454/

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