cmakelists中加入protobuf
时间: 2025-05-09 07:42:10 浏览: 35
### 配置 Protobuf 支持
为了在 `CMakeLists.txt` 文件中添加对 Protocol Buffers (Protobuf) 的支持,需遵循特定的配置方法[^3]。
#### 设置最小 CMake 版本和支持包查找路径
首先应指定最低所需的 CMake 版本,并设置模块路径以便于后续寻找所需库:
```cmake
cmake_minimum_required(VERSION 3.1)
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
```
#### 查找并引入 Protobuf 库
接着利用 find_package 命令来定位安装好的 Protobuf 软件包及其关联组件。这一步骤对于确保项目能够访问到必要的头文件和链接静态/动态库至关重要:
```cmake
find_package(Protobuf REQUIRED)
include_directories(${PROTOBUF_INCLUDE_DIRS})
add_definitions(-DGOOGLE_PROTOBUF_NO_RTTI=1)
link_directories(${PROTOBUF_LIBRARY_DIRS})
```
#### 定义 .proto 文件处理逻辑
针对 `.proto` 文件定义相应的编译规则,生成对应的 C++ 或 Python 类型描述符以及序列化接口实现代码。此过程通常涉及调用 protoc 编译器完成转换工作:
```cmake
file(GLOB PROTO_FILES "${PROJECT_SOURCE_DIR}/protos/*.proto")
foreach(PROTO_FILE IN LISTS PROTO_FILES)
get_filename_component(FILE_NAME_WE ${PROTO_FILE} NAME_WLE)
set(CPP_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME_WE}")
file(MAKE_DIRECTORY ${CPP_OUTPUT_DIR})
add_custom_command(
OUTPUT "${CPP_OUTPUT_DIR}/${FILE_NAME_WE}.pb.cc"
"${CPP_OUTPUT_DIR}/${FILE_NAME_WE}.pb.h"
COMMAND protobuf::protoc
--cpp_out=${CPP_OUTPUT_DIR}
-I${PROJECT_SOURCE_DIR}/protos/
${PROTO_FILE}
DEPENDS ${PROTO_FILE}
COMMENT "Running C++ protocol buffer compiler on ${PROTO_FILE}"
)
list(APPEND PROTOS_GENERATED_SOURCES
"${CPP_OUTPUT_DIR}/${FILE_NAME_WE}.pb.cc"
"${CPP_OUTPUT_DIR}/${FILE_NAME_WE}.pb.h")
endforeach()
```
#### 将生成源码加入目标构建列表
最后把由上述命令产生的 CPP 源文件纳入最终可执行程序或者共享库的目标依赖项之中,从而让整个工程可以正常编译运行:
```cmake
add_executable(my_project main.cpp ${PROTOS_GENERATED_SOURCES})
target_link_libraries(my_project PRIVATE protobuf::libprotobuf)
```
阅读全文
相关推荐









