protobuf cmakelist,msvc utf-8设置

打印 上一主题 下一主题

主题 957|帖子 957|积分 2871

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
源字符集和实行字符集
源字符集指的是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>”)
  1. # 必须在add_library , add_executable 前设置,否则无效
  2. add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>")
  3. # protoc必须要加上这条!!!!!!!!!!!!!!!
  4. add_definitions(-DPROTOBUF_USE_DLLS)
  5. set(Protobuf_DIR "C:/Program Files/protobuf/lib/cmake/protobuf")
  6. set(Absl_DIR "C:/Program Files/protobuf/lib/cmake/absl")
  7. set(Utf8_DIR "C:/Program Files/protobuf/lib/cmake/utf8_range")
  8. find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Protobuf)
  9. find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)
  10. # 设置 Protobuf 路径
  11. set(PROTOC_PATH "C:/Program Files/protobuf/bin/protoc.exe")
  12. # 查找 protoc 可执行文件
  13. find_program(PROTOC_EXECUTABLE
  14.     NAMES protoc
  15.     PATHS ${PROTOC_PATH}
  16. )
  17. if(NOT PROTOC_EXECUTABLE)
  18.     message(FATAL_ERROR "protoc not found. Please install it or set PROTOC_PATH.")
  19. endif()
  20. message(STATUS "Using protoc: ${PROTOC_EXECUTABLE}")
  21. # 设置 proto 文件目录
  22. set(PROTOBUF_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/proto")
  23. # 设置生成文件输出目录
  24. set(GENERATED_PROTO_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
  25. # 确保生成文件目录存在
  26. file(MAKE_DIRECTORY ${GENERATED_PROTO_DIR})
  27. # 设置 proto 文件列表
  28. set(PROTO_FILES
  29.     ${PROTOBUF_SRC_DIR}/addressbook.proto
  30. )
  31. # 为每个 proto 文件生成相应的 C++ 文件
  32. foreach(PROTO_FILE ${PROTO_FILES})
  33.     get_filename_component(PROTO_NAME ${PROTO_FILE} NAME_WE)
  34.     set(GENERATED_SRC "${GENERATED_PROTO_DIR}/${PROTO_NAME}.pb.cc")
  35.     set(GENERATED_HDR "${GENERATED_PROTO_DIR}/${PROTO_NAME}.pb.h")
  36.     add_custom_command(
  37.         OUTPUT ${GENERATED_SRC} ${GENERATED_HDR}
  38.         COMMAND ${PROTOC_EXECUTABLE}
  39.         ARGS --cpp_out=${GENERATED_PROTO_DIR} -I${PROTOBUF_SRC_DIR} ${PROTO_FILE}
  40.         DEPENDS ${PROTO_FILE}
  41.         COMMENT "Generating C++ source files from ${PROTO_FILE}"
  42.         VERBATIM
  43.     )
  44.     list(APPEND GENERATED_SRC_FILES ${GENERATED_SRC})
  45. endforeach()
  46. # 将生成的 C++ 文件添加到构建目标中
  47. add_executable(untitled1 main.cpp ${GENERATED_SRC_FILES})
  48. # 添加生成文件目录到 include 路径
  49. target_include_directories(untitled1 PRIVATE ${GENERATED_PROTO_DIR})
  50. # 添加 Protobuf 头文件目录
  51. target_include_directories(untitled1 PRIVATE "C:/Program Files/protobuf/include")
  52. # 查找 C:\Program Files\protobuf\lib 下的所有 .lib 文件
  53. file(GLOB PROTOBUF_LIBRARIES "C:/Program Files/protobuf/lib/*.lib")
  54. # 打印找到的库文件(可选)
  55. #message(STATUS "Protobuf libraries found: ${PROTOBUF_LIBRARIES}")
  56. target_link_libraries(untitled1 Qt${QT_VERSION_MAJOR}::Core ${PROTOBUF_LIBRARIES})
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

光之使者

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表