FindProtobuf¶
Locate and configure the Google Protocol Buffers library.
New in version 3.6: Support for find_package()
version checks.
Changed in version 3.6: All input and output variables use the Protobuf_
prefix.
Variables with PROTOBUF_
prefix are still supported for compatibility.
The following variables can be set and are optional:
Protobuf_SRC_ROOT_FOLDER
When compiling with MSVC, if this cache variable is set the protobuf-default VS project build locations (vsprojects/Debug and vsprojects/Release or vsprojects/x64/Debug and vsprojects/x64/Release) will be searched for libraries and binaries.
Protobuf_IMPORT_DIRS
List of additional directories to be searched for imported .proto files.
Protobuf_DEBUG
New in version 3.6.
Show debug messages.
Protobuf_USE_STATIC_LIBS
New in version 3.9.
Set to ON to force the use of the static libraries. Default is OFF.
Defines the following variables:
Protobuf_FOUND
Found the Google Protocol Buffers library (libprotobuf & header files)
Protobuf_VERSION
New in version 3.6.
Version of package found.
Protobuf_INCLUDE_DIRS
Include directories for Google Protocol Buffers
Protobuf_LIBRARIES
The protobuf libraries
Protobuf_PROTOC_LIBRARIES
The protoc libraries
Protobuf_LITE_LIBRARIES
The protobuf-lite libraries
New in version 3.9: The following IMPORTED
targets are also defined:
protobuf::libprotobuf
The protobuf library.
protobuf::libprotobuf-lite
The protobuf lite library.
protobuf::libprotoc
The protoc library.
protobuf::protoc
New in version 3.10: The protoc compiler.
The following cache variables are also available to set or use:
Protobuf_LIBRARY
The protobuf library
Protobuf_PROTOC_LIBRARY
The protoc library
Protobuf_INCLUDE_DIR
The include directory for protocol buffers
Protobuf_PROTOC_EXECUTABLE
The protoc compiler
Protobuf_LIBRARY_DEBUG
The protobuf library (debug)
Protobuf_PROTOC_LIBRARY_DEBUG
The protoc library (debug)
Protobuf_LITE_LIBRARY
The protobuf lite library
Protobuf_LITE_LIBRARY_DEBUG
The protobuf lite library (debug)
Example:
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})
Note
The protobuf_generate_cpp
and protobuf_generate_python
functions and add_executable()
or add_library()
calls only work properly within the same directory.
- protobuf_generate_cpp¶
Add custom commands to process
.proto
files to C++:protobuf_generate_cpp (<SRCS> <HDRS> [DESCRIPTORS <DESC>] [EXPORT_MACRO <MACRO>] [<ARGN>...])
SRCS
Variable to define with autogenerated source files
HDRS
Variable to define with autogenerated header files
DESCRIPTORS
New in version 3.10: Variable to define with autogenerated descriptor files, if requested.
EXPORT_MACRO
is a macro which should expand to
__declspec(dllexport)
or__declspec(dllimport)
depending on what is being compiled.ARGN
.proto
files
- protobuf_generate_python¶
New in version 3.4.
Add custom commands to process
.proto
files to Python:protobuf_generate_python (<PY> [<ARGN>...])
PY
Variable to define with autogenerated Python files
ARGN
.proto
files
- protobuf_generate¶
New in version 3.13.
Automatically generate source files from
.proto
schema files at build time: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
A flag that causes the base path of all proto schema files to be added to
IMPORT_DIRS
.LANGUAGE
A single value: cpp or python. Determines what kind of source files are being generated. Defaults to cpp.
OUT_VAR
Name of a CMake variable that will be filled with the paths to the generated source files.
EXPORT_MACRO
Name of a macro that is applied to all generated Protobuf message classes and extern variables. It can, for example, be used to declare DLL exports.
PROTOC_OUT_DIR
Output directory of generated source files. Defaults to
CMAKE_CURRENT_BINARY_DIR
.PLUGIN
New in version 3.21.
An optional plugin executable. This could, for example, be the path to
grpc_cpp_plugin
.PLUGIN_OPTIONS
New in version 3.28.
Additional options provided to the plugin, such as
generate_mock_code=true
for the gRPC cpp plugin.DEPENDENCIES
New in version 3.28.
Arguments forwarded to the
DEPENDS
of the underlyingadd_custom_command
invocation.TARGET
CMake target that will have the generated files added as sources.
PROTOS
List of proto schema files. If omitted, then every source file ending in proto of
TARGET
will be used.IMPORT_DIRS
A common parent directory for the schema files. For example, if the schema file is
proto/helloworld/helloworld.proto
and the import directoryproto/
then the generated files are${PROTOC_OUT_DIR}/helloworld/helloworld.pb.h
and${PROTOC_OUT_DIR}/helloworld/helloworld.pb.cc
.GENERATE_EXTENSIONS
If LANGUAGE is omitted then this must be set to the extensions that protoc generates.
PROTOC_OPTIONS
New in version 3.28.
Additional arguments that are forwarded to protoc.
Example:
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)