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_FOLDERWhen 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_DIRSList of additional directories to be searched for imported .proto files.
Protobuf_DEBUGNew in version 3.6.
Show debug messages.
Protobuf_USE_STATIC_LIBSNew in version 3.9.
Set to ON to force the use of the static libraries. Default is OFF.
Defines the following variables:
Protobuf_FOUNDFound the Google Protocol Buffers library (libprotobuf & header files)
Protobuf_VERSIONNew in version 3.6.
Version of package found.
Protobuf_INCLUDE_DIRSInclude directories for Google Protocol Buffers
Protobuf_LIBRARIESThe protobuf libraries
Protobuf_PROTOC_LIBRARIESThe protoc libraries
Protobuf_LITE_LIBRARIESThe protobuf-lite libraries
New in version 3.9: The following IMPORTED targets are also defined:
protobuf::libprotobufThe protobuf library.
protobuf::libprotobuf-liteThe protobuf lite library.
protobuf::libprotocThe protoc library.
protobuf::protocNew in version 3.10: The protoc compiler.
The following cache variables are also available to set or use:
Protobuf_LIBRARYThe protobuf library
Protobuf_PROTOC_LIBRARYThe protoc library
Protobuf_INCLUDE_DIRThe include directory for protocol buffers
Protobuf_PROTOC_EXECUTABLEThe protoc compiler
Protobuf_LIBRARY_DEBUGThe protobuf library (debug)
Protobuf_PROTOC_LIBRARY_DEBUGThe protoc library (debug)
Protobuf_LITE_LIBRARYThe protobuf lite library
Protobuf_LITE_LIBRARY_DEBUGThe 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.
Add custom commands to process .proto files to C++:
protobuf_generate_cpp (<SRCS> <HDRS>
[DESCRIPTORS <DESC>] [EXPORT_MACRO <MACRO>] [<ARGN>...])
SRCSVariable to define with autogenerated source files
HDRSVariable to define with autogenerated header files
DESCRIPTORSNew in version 3.10: Variable to define with autogenerated descriptor files, if requested.
EXPORT_MACROis a macro which should expand to __declspec(dllexport) or
__declspec(dllimport) depending on what is being compiled.
ARGN.proto files
New in version 3.4.
Add custom commands to process .proto files to Python:
protobuf_generate_python (<PY> [<ARGN>...])
PYVariable to define with autogenerated Python files
ARGN.proto files
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_PATHA flag that causes the base path of all proto schema files to be added to
IMPORT_DIRS.
LANGUAGEA single value: cpp or python. Determines what kind of source files are being generated. Defaults to cpp.
OUT_VARName of a CMake variable that will be filled with the paths to the generated source files.
EXPORT_MACROName 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_DIROutput directory of generated source files. Defaults to CMAKE_CURRENT_BINARY_DIR.
PLUGINNew in version 3.21.
An optional plugin executable. This could, for example, be the path to
grpc_cpp_plugin.
PLUGIN_OPTIONSNew in version 3.28.
Additional options provided to the plugin, such as generate_mock_code=true
for the gRPC cpp plugin.
DEPENDENCIESNew in version 3.28.
Arguments forwarded to the DEPENDS of the underlying add_custom_command
invocation.
TARGETCMake target that will have the generated files added as sources.
PROTOSList of proto schema files. If omitted, then every source file ending in proto of TARGET will be used.
IMPORT_DIRSA common parent directory for the schema files. For example, if the schema file is
proto/helloworld/helloworld.proto and the import directory proto/ then the
generated files are ${PROTOC_OUT_DIR}/helloworld/helloworld.pb.h and
${PROTOC_OUT_DIR}/helloworld/helloworld.pb.cc.
GENERATE_EXTENSIONSIf LANGUAGE is omitted then this must be set to the extensions that protoc generates.
PROTOC_OPTIONSNew 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)