FindProtobuf¶
尋找並配置 Google Protocol Buffers 函式庫。
新增於版本 3.6: 支援 find_package()
版本檢查。
變更於版本 3.6: 所有輸入和輸出變數皆使用 Protobuf_
前綴。為了相容性,仍然支援使用 PROTOBUF_
前綴的變數。
可以設定的以下變數為可選:
Protobuf_SRC_ROOT_FOLDER
當使用 MSVC 編譯時,如果設定此快取變數,將會搜尋 protobuf 預設的 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 Protocol Buffers 函式庫(libprotobuf & 標頭檔)
Protobuf_VERSION
新增於版本 3.6。
找到的套件版本。
Protobuf_INCLUDE_DIRS
Google Protocol Buffers 的包含目錄
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
protocol buffers 的包含目錄
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 綱要檔案列表。如果省略,則會使用
TARGET
中每一個以 *proto* 結尾的原始碼檔案。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)