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

用户名

我有以下CMakeList命令在我的CMakeLists.txt文件,我想生成的.cc和下.h文件src-gen夹这是在我的主文件夹,在那里srcinclude和其他的东西都是。我放入命令以查看它们是否起作用,但是它们仍在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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

删除特定文件夹下的文件

从同一个.proto文件生成Python和Go代码-导入问题

是什么JDK文件夹和JRE文件夹下的文件夹的jre的区别?

ansible +是否可以在某个文件夹下找到ansible

S3从特定文件夹下载

PHP:在特定文件夹下重定向404错误

有什么方法可以将所有文件复制到同一父文件夹下的一个特定子文件夹?

如何删除除父文件夹下的某些特定文件夹以外的所有文件

如何删除特定文件夹下的文件和文件夹

将所有文件从FTP上的特定文件夹下载到本地文件夹

mongodb 将生成的文件保存在 .snapshot 文件夹下

从共享文件夹下载

从Dropbox上的公共共享文件夹和子文件夹下载图像

C ++代码文件扩展名?.cc和.cpp

.cc和.cpp文件后缀有什么区别?

混合.c和.h文件

链接.c和.h文件

如何使用nanopb和protobuf将nanopb .proto文件编译为.h和.c文件(`protoc`编译问题)

生成 .proto 文件的 Google Assistant API 缺少导入

为复杂的Java对象生成.proto文件

从任何地方删除未知文件夹下的特定子文件夹

删除早于特定日期的文件,并排除文件夹下的直接文件

批处理文件以查找特定子文件夹下的文件

res / raw文件夹下的jar文件

Nanoc中bower_component文件夹下的编译和路由文件

从VB.NET的FTP文件夹下载所有文件和子目录

快速应用程序在用户的主文件夹下创建配置文件夹和配置文件

Eclipse不会生成MainActivity,Layout xml和位于drawable-ldpi文件夹下的启动器图标

如何使用grep在当前目录中搜索具有字符串“ hello”但仅显示.h和.cc文件的所有文件?