CMAKE 配置 protobuf
Q: protobuf_generate_cpp 是 CMake 的内置函数么?
A:
不是的。protobuf_generate_cpp 不是 CMake 的内置函数,而是由 FindProtobuf.cmake 模块提供的一个函数,用于从 .proto 文件生成 C++ 代码。FindProtobuf.cmake 是 Protobuf 库的 CMake 模块。
使用这个函数时,你需要先找到 Protobuf 库。例如:
find_package(Protobuf REQUIRED)
然后你就可以使用 protobuf_generate_cpp 函数了:
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS my_proto_file.proto)
这里,PROTO_SRCS 和 PROTO_HDRS 分别是生成的源文件和头文件的变量,my_proto_file.proto 是你要编译的 Protobuf 文件。
注意:在某些版本的 Protobuf 中,可能需要导入 FindProtobuf 模块,如下:
include(FindProtobuf)
find_package(Protobuf REQUIRED)
这样才能使用 protobuf_generate_cpp。总的来说,这取决于你的 Protobuf 版本以及你的项目设置。
Q: protobuf_generate_cpp 生成的protobuf文件编译中会有 -Wsign-compare 警告,如何抑制
A:
如果你在使用 Protobuf 生成的 C++ 文件进行编译时遇到 -Wsign-compare 警告,并且你不希望看到这些警告,可以在你的 CMakeLists.txt 中添加一些设置来抑制这些警告。
一个常见的方法是为 Protobuf 生成的文件单独指定编译选项。例如,你可以关闭 -Wsign-compare 警告:
set_source_files_properties(${PROTO_SRCS} ${PROTO_HDRS}
PROPERTIES COMPILE_FLAGS "-Wno-sign-compare")
在这个例子中,${PROTO_SRCS} 和 ${PROTO_HDRS} 是由 protobuf_generate_cpp 函数生成的源文件和头文件的变量。-Wno-sign-compare 是 GCC 和 Clang 编译器用来关闭 -Wsign-compare 警告的选项。
然而,请注意,这样做可能会使你忽视其他重要的警告。确保这是你想要的结果,并且理解这可能带来的后果。
Q: 这个语句放在 protobuf_generate_cpp 之前么?
A:
你应该在调用 protobuf_generate_cpp 后,且在添加目标(如: add_executable 或 add_library)前使用 set_source_files_properties。理由是 protobuf_generate_cpp 生成的源文件和头文件需要在 set_source_files_properties 调用时已存在。
所以先后顺序应该如下:
find_package(Protobuf REQUIRED)
# Generate the .cpp and .h files from .proto files
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS my_proto_file.proto)
# Set properties to suppress warnings in protobuf generated files
set_source_files_properties(${PROTO_SRCS} ${PROTO_HDRS}
PROPERTIES COMPILE_FLAGS "-Wno-sign-compare")
# Then add your target (library or executable)
add_executable(MyExecutable ${SRC_LIST} ${PROTO_SRCS} ${PROTO_HDRS})
标签:CMake,protobuf,PROTO,proto,备忘录,cpp,generate,Protobuf
From: https://www.cnblogs.com/math/p/cmake.html