查找Protobuf

找到并配置 Google Protocol Buffers 库。

在 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 以强制使用静态库。默认为关闭。

定义以下变量:

Protobuf_FOUND

找到 Google Protocol Buffers 库(libprotobuf 和头文件)

Protobuf_VERSION

在 3.6 版本加入.

找到包的版本。

Protobuf_INCLUDE_DIRS

包含 Google Protocol Buffers 的目录

Protobuf_LIBRARIES

protobuf 库

Protobuf_PROTOC_LIBRARIES

协议库

Protobuf_LITE_LIBRARIES

protobuf-lite 库

在 3.9 版本加入: 还定义了以下 IMPORTED 目标:

protobuf::libprotobuf

protobuf 库。

protobuf::libprotobuf-lite

protobuf 精简版库。

protobuf::libprotoc

协议库。

protobuf::protoc

在 3.10 版本加入: 协议编译器。

以下缓存变量也可用于设置或使用:

Protobuf_LIBRARY

protobuf 库

Protobuf_PROTOC_LIBRARY

协议库

Protobuf_INCLUDE_DIR

协议缓冲区的包含目录

Protobuf_PROTOC_EXECUTABLE

协议编译器

Protobuf_LIBRARY_DEBUG

protobuf 库(调试)

Protobuf_PROTOC_LIBRARY_DEBUG

协议库(调试)

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_cppprotobuf_generate_python 函数和 add_executable()add_library() 调用只能在同一目录中正常工作。

protobuf_generate_cpp

添加自定义命令以将 .proto 文件处理到 C++:

protobuf_generate_cpp (<SRCS> <HDRS>
    [DESCRIPTORS <DESC>] [EXPORT_MACRO <MACRO>] [<ARGN>...])
SRCS

使用自动生成的源文件定义的变量

HDRS

使用自动生成的头文件定义的变量

描述符

在 3.10 版本加入: 如果需要,使用自动生成的描述符文件定义的变量。

EXPORT_MACRO

是一个宏,它应该扩展为``__declspec(dllexport)`` 或``__declspec(dllimport)``,具体取决于正在编译的内容。

ARGN

.proto 文件

protobuf_generate_python

在 3.4 版本加入.

添加自定义命令以处理 .proto 文件到 Python:

protobuf_generate_python (<PY> [<ARGN>...])
PY

使用自动生成的 Python 文件定义的变量

ARGN

.proto 文件