FindProtobuf¶
找到并配置 Google 协议缓冲区库。
3.6 版中已添加: 支持 find_package()
版本检查。
3.6 版中已更改: 所有输入和输出变量都使用 Protobuf_
前缀。带有 PROTOBUF_
前缀的变量仍受支持,以保持兼容性。
以下变量可以设置,且是可选的
Protobuf_SRC_ROOT_FOLDER
使用 MSVC 编译时,如果设置此缓存变量,将搜索 protobuf-default VS 项目构建位置 (vsprojects/Debug 和 vsprojects/Release 或 vsprojects/x64/Debug 和 vsprojects/x64/Release) 以查找库和二进制文件。
Protobuf_IMPORT_DIRS
需要搜索以查找导入的 .proto 文件的其他目录列表。
Protobuf_DEBUG
3.6 版中已添加。
显示调试消息。
Protobuf_USE_STATIC_LIBS
3.9 版中已添加。
设置为 ON 以强制使用静态库。默认值为 OFF。
定义以下变量
Protobuf_FOUND
找到了 Google 协议缓冲区库 (libprotobuf & 头文件)
Protobuf_VERSION
3.6 版中已添加。
找到的软件包版本。
Protobuf_INCLUDE_DIRS
Google 协议缓冲区的包含目录
Protobuf_LIBRARIES
protobuf 库
Protobuf_PROTOC_LIBRARIES
protoc 库
Protobuf_LITE_LIBRARIES
protobuf-lite 库
3.9 版中已添加: 以下 IMPORTED
目标也已定义
protobuf::libprotobuf
protobuf 库。
protobuf::libprotobuf-lite
protobuf lite 库。
protobuf::libprotoc
protoc 库。
protobuf::protoc
3.10 版中已添加: protoc 编译器。
以下缓存变量也可用于设置或使用
Protobuf_LIBRARY
protobuf 库
Protobuf_PROTOC_LIBRARY
protoc 库
Protobuf_INCLUDE_DIR
协议缓冲区的包含目录
Protobuf_PROTOC_EXECUTABLE
protoc 编译器
Protobuf_LIBRARY_DEBUG
protobuf 库 (调试)
Protobuf_PROTOC_LIBRARY_DEBUG
protoc 库 (调试)
Protobuf_LITE_LIBRARY
protobuf lite 库
Protobuf_LITE_LIBRARY_DEBUG
protobuf lite 库 (调试)
示例
find_package(Protobuf REQUIRED)
include_directories(${Protobuf_INCLUDE_DIRS})
include_directories(${CMAKE_CURRENT_BINARY_DIR})
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS foo.proto)
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS EXPORT_MACRO DLL_EXPORT foo.proto)
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS DESCRIPTORS PROTO_DESCS foo.proto)
protobuf_generate_python(PROTO_PY foo.proto)
add_executable(bar bar.cc ${PROTO_SRCS} ${PROTO_HDRS})
target_link_libraries(bar ${Protobuf_LIBRARIES})
注释
函数 protobuf_generate_cpp
和 protobuf_generate_python
以及 add_executable()
或 add_library()
仅在同一目录中有效。
- protobuf_generate_cpp¶
添加自定义命令以将
.proto
文件处理为 C++protobuf_generate_cpp (<SRCS> <HDRS> [DESCRIPTORS <DESC>] [EXPORT_MACRO <MACRO>] [<ARGN>...])
SRCS
使用自动生成源文件定义的变量
HDRS
使用自动生成头文件定义的变量
DESCRIPTORS
在 3.10 版本中添加: 如果请求,使用自动生成描述符文件定义的变量。
EXPORT_MACRO
这个宏应扩展为
__declspec(dllexport)
或__declspec(dllimport)
(具体取决于正在编译的内容)。ARGN
.proto
文件
- protobuf_generate_python¶
在 3.4 版本中添加。
添加自定义命令以将
.proto
文件处理为 Pythonprotobuf_generate_python (<PY> [<ARGN>...])
PY
使用自动生成的 Python 文件定义的变量
ARGN
.proto
文件
- protobuf_generate¶
在 3.13 版本中添加。
在构建时根据
.proto
架构文件自动生成源文件protobuf_generate ( TARGET <target> [LANGUAGE <lang>] [OUT_VAR <out_var>] [EXPORT_MACRO <macro>] [PROTOC_OUT_DIR <dir>] [PLUGIN <plugin>] [PLUGIN_OPTIONS <plugin_options>] [DEPENDENCIES <depends] [PROTOS <protobuf_files>] [IMPORT_DIRS <dirs>] [GENERATE_EXTENSIONS <extensions>] [PROTOC_OPTIONS <protoc_options>] [APPEND_PATH])
APPEND_PATH
这面标志会导致将所有 proto 架构文件的基路径添加到
IMPORT_DIRS
。LANGUAGE
一个值:cpp 或 python。用于确定要生成什么类型的源文件。默认为 cpp。
OUT_VAR
将填充为生成的源文件的路径的 CMake 变量的名称。
EXPORT_MACRO
应用于所有生成的 Protobuf 消息类和外部变量的宏的名称。它还可以用于声明 DLL 导出。
PROTOC_OUT_DIR
生成源文件的输出目录。默认为
CMAKE_CURRENT_BINARY_DIR
。PLUGIN
在 3.21 版本中添加。
一个可选的插件可执行文件。例如,它可以是
grpc_cpp_plugin
的路径。PLUGIN_OPTIONS
在 3.28 版本中添加。
提供给该插件的其他选项,例如,gRPC cpp 插件的
generate_mock_code=true
。DEPENDENCIES
在 3.28 版本中添加。
转发到基础
add_custom_command
调用DEPENDS
的参数。TARGET
将生成的作为源添加的 CMake 目标。
PROTOS
proto 架构文件的列表。如果省略,那么将使用 proto 结尾的每个
TARGET
源文件。IMPORT_DIRS
用于架构文件的一个通用父目录。例如,如果架构文件是
proto/helloworld/helloworld.proto
,而导入目录是proto/
,那么生成的目录便是${PROTOC_OUT_DIR}/helloworld/helloworld.pb.h
和${PROTOC_OUT_DIR}/helloworld/helloworld.pb.cc
。GENERATE_EXTENSIONS
如果省略 LANGUAGE,那么它必须设置为 protoc 生成的扩展。
PROTOC_OPTIONS
在 3.28 版本中添加。
将转发到 protoc 中的其他参数。
示例
find_package(gRPC CONFIG REQUIRED) find_package(Protobuf REQUIRED) add_library(ProtoTest Test.proto) target_link_libraries(ProtoTest PUBLIC gRPC::grpc++) protobuf_generate(TARGET ProtoTest) protobuf_generate( TARGET ProtoTest LANGUAGE grpc PLUGIN protoc-gen-grpc=$<TARGET_FILE:gRPC::grpc_cpp_plugin> PLUGIN_OPTIONS generate_mock_code=true GENERATE_EXTENSIONS .grpc.pb.h .grpc.pb.cc)