当前位置: 首页 > news >正文

protobuf cmakelist,msvc utf-8设置

源字符集和执行字符集
源字符集指的是cpp文件中字符串的编码方式
执行字符集指的是exe文件中字符串的编码方式

msvc编译器设置的命令行参数
/source-charset:utf-8 /execution-charset:utf-8

cmake中设置
add_compile_options(“ < < <<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>”)

add_compile_options(“ < < <<CXX_COMPILER_ID:MSVC>:/execution-charset:gbk>”)

# 必须在add_library , add_executable 前设置,否则无效
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>")# protoc必须要加上这条!!!!!!!!!!!!!!!
add_definitions(-DPROTOBUF_USE_DLLS)set(Protobuf_DIR "C:/Program Files/protobuf/lib/cmake/protobuf")
set(Absl_DIR "C:/Program Files/protobuf/lib/cmake/absl")
set(Utf8_DIR "C:/Program Files/protobuf/lib/cmake/utf8_range")find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Protobuf)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)# 设置 Protobuf 路径
set(PROTOC_PATH "C:/Program Files/protobuf/bin/protoc.exe")
# 查找 protoc 可执行文件
find_program(PROTOC_EXECUTABLENAMES protocPATHS ${PROTOC_PATH}
)
if(NOT PROTOC_EXECUTABLE)message(FATAL_ERROR "protoc not found. Please install it or set PROTOC_PATH.")
endif()
message(STATUS "Using protoc: ${PROTOC_EXECUTABLE}")# 设置 proto 文件目录
set(PROTOBUF_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/proto")# 设置生成文件输出目录
set(GENERATED_PROTO_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")# 确保生成文件目录存在
file(MAKE_DIRECTORY ${GENERATED_PROTO_DIR})# 设置 proto 文件列表
set(PROTO_FILES${PROTOBUF_SRC_DIR}/addressbook.proto
)# 为每个 proto 文件生成相应的 C++ 文件
foreach(PROTO_FILE ${PROTO_FILES})get_filename_component(PROTO_NAME ${PROTO_FILE} NAME_WE)set(GENERATED_SRC "${GENERATED_PROTO_DIR}/${PROTO_NAME}.pb.cc")set(GENERATED_HDR "${GENERATED_PROTO_DIR}/${PROTO_NAME}.pb.h")add_custom_command(OUTPUT ${GENERATED_SRC} ${GENERATED_HDR}COMMAND ${PROTOC_EXECUTABLE}ARGS --cpp_out=${GENERATED_PROTO_DIR} -I${PROTOBUF_SRC_DIR} ${PROTO_FILE}DEPENDS ${PROTO_FILE}COMMENT "Generating C++ source files from ${PROTO_FILE}"VERBATIM)list(APPEND GENERATED_SRC_FILES ${GENERATED_SRC})
endforeach()# 将生成的 C++ 文件添加到构建目标中
add_executable(untitled1 main.cpp ${GENERATED_SRC_FILES})# 添加生成文件目录到 include 路径
target_include_directories(untitled1 PRIVATE ${GENERATED_PROTO_DIR})# 添加 Protobuf 头文件目录
target_include_directories(untitled1 PRIVATE "C:/Program Files/protobuf/include")# 查找 C:\Program Files\protobuf\lib 下的所有 .lib 文件
file(GLOB PROTOBUF_LIBRARIES "C:/Program Files/protobuf/lib/*.lib")# 打印找到的库文件(可选)
#message(STATUS "Protobuf libraries found: ${PROTOBUF_LIBRARIES}")
target_link_libraries(untitled1 Qt${QT_VERSION_MAJOR}::Core ${PROTOBUF_LIBRARIES})
http://www.lryc.cn/news/424149.html

相关文章:

  • Haproxy讲解
  • K8S系列——一、Ubuntu上安装Helm
  • 排序: 插入\希尔\选择\归并\冒泡\快速\堆排序实现
  • OpenCV图像处理——按最小外接矩形剪切图像处理ROI后映射回原图像
  • Linux中以单容器部署Nginx+ASP.NET Core
  • 【秋招笔试】8.11大疆秋招(第三套)-三语言题解
  • 标题:打造编程学习的知识宝库:高效笔记记录与整理
  • 【Rust光年纪】Rust 官方提供的关键工具概览:代码检查、格式化和依赖管理
  • 【Python学习-UI界面】PyQt5 小部件8-QSlider 数值滑动
  • MapReduce入门教程
  • JDBC1 Mysql驱动,连接数据库
  • LeetCode 205 同构字符串
  • ARM高性能计算(HPC)处理器Neoverse介绍
  • 【每日力扣中医养生】力扣1298. 你能从盒子里获得的最大糖果数
  • 大数据-81 Spark 安装配置环境 集群环境配置 超详细 三台云服务器
  • C#创建一个自定义控件类
  • springboot牙科就诊管理系统--论文源码调试讲解
  • CUDA+tensorflow+python+vscode在GPU下环境安装及问题汇总与解答
  • 24/8/14算法笔记 复习_逻辑回归sigmoid
  • MySQL忘记/无root密码,强制修改root密码
  • 探索 MongoDB 的 $currentDate:解决 TTL 时间不同步问题的利器
  • defineModel
  • 去中心化技术的崛起:探索Web3的新时代
  • GNU/Linux - copy_{to,from}_user: 用户和内核空间的内存互拷贝
  • 进阶岛任务1: 探索 InternLM 模型能力边界
  • RabbitMQ实现多线程处理接收消息
  • AI智能网关 边缘计算 视觉AI
  • Java基础之原反补码
  • Unity如何使用Spine动画导出的动画
  • 变量位操作