Locate and configure the Google Protocol Buffers library.
Added 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 Added in version 3.6.
Show debug messages.
Protobuf_USE_STATIC_LIBS Added 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 Added 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
Added 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 Added 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 Added 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 Added 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 Added 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 Added in version 3.21.
An optional plugin executable. This could, for example, be the path to grpc_cpp_plugin.
PLUGIN_OPTIONS Added in version 3.28.
Additional options provided to the plugin, such as generate_mock_code=true for the gRPC cpp plugin.
DEPENDENCIES Added in version 3.28.
Arguments forwarded to the DEPENDS of the underlying add_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 directory proto/ 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 Added 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)
© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/module/FindProtobuf.html