首页 > 其他分享 >CMake 备忘录

CMake 备忘录

时间:2023-09-08 18:33:11浏览次数:28  
标签:CMake protobuf PROTO proto 备忘录 cpp generate Protobuf

CMAKE 配置 protobuf

Q: protobuf_generate_cpp 是 CMake 的内置函数么?
A:

不是的。protobuf_generate_cpp 不是 CMake 的内置函数,而是由 FindProtobuf.cmake 模块提供的一个函数,用于从 .proto 文件生成 C++ 代码。FindProtobuf.cmake 是 Protobuf 库的 CMake 模块。

使用这个函数时,你需要先找到 Protobuf 库。例如:

find_package(Protobuf REQUIRED)

然后你就可以使用 protobuf_generate_cpp 函数了:

protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS my_proto_file.proto)

这里,PROTO_SRCS 和 PROTO_HDRS 分别是生成的源文件和头文件的变量,my_proto_file.proto 是你要编译的 Protobuf 文件。

注意:在某些版本的 Protobuf 中,可能需要导入 FindProtobuf 模块,如下:

include(FindProtobuf)
find_package(Protobuf REQUIRED)

这样才能使用 protobuf_generate_cpp。总的来说,这取决于你的 Protobuf 版本以及你的项目设置。

Q: protobuf_generate_cpp 生成的protobuf文件编译中会有 -Wsign-compare 警告,如何抑制
A:

如果你在使用 Protobuf 生成的 C++ 文件进行编译时遇到 -Wsign-compare 警告,并且你不希望看到这些警告,可以在你的 CMakeLists.txt 中添加一些设置来抑制这些警告。

一个常见的方法是为 Protobuf 生成的文件单独指定编译选项。例如,你可以关闭 -Wsign-compare 警告:

set_source_files_properties(${PROTO_SRCS} ${PROTO_HDRS}
    PROPERTIES COMPILE_FLAGS "-Wno-sign-compare")

在这个例子中,${PROTO_SRCS} 和 ${PROTO_HDRS} 是由 protobuf_generate_cpp 函数生成的源文件和头文件的变量。-Wno-sign-compare 是 GCC 和 Clang 编译器用来关闭 -Wsign-compare 警告的选项。

然而,请注意,这样做可能会使你忽视其他重要的警告。确保这是你想要的结果,并且理解这可能带来的后果。

Q: 这个语句放在 protobuf_generate_cpp 之前么?
A:

你应该在调用 protobuf_generate_cpp 后,且在添加目标(如: add_executable 或 add_library)前使用 set_source_files_properties。理由是 protobuf_generate_cpp 生成的源文件和头文件需要在 set_source_files_properties 调用时已存在。

所以先后顺序应该如下:

find_package(Protobuf REQUIRED)

# Generate the .cpp and .h files from .proto files
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS my_proto_file.proto)

# Set properties to suppress warnings in protobuf generated files
set_source_files_properties(${PROTO_SRCS} ${PROTO_HDRS}
    PROPERTIES COMPILE_FLAGS "-Wno-sign-compare")

# Then add your target (library or executable)
add_executable(MyExecutable ${SRC_LIST} ${PROTO_SRCS} ${PROTO_HDRS})

标签:CMake,protobuf,PROTO,proto,备忘录,cpp,generate,Protobuf
From: https://www.cnblogs.com/math/p/cmake.html

相关文章

  • qt程序调用cuda-11.7,cmake编译时,提示:"CMakeCUDACompilerId.cu" failed. Compiler:
    报错显示:Running/home/wc/software/cmake-3.26.3-linux-x86_64/bin/cmake/home/wc/work/junke_src/missile-sim'-GCodeBlocks-UnixMakefiles'in/home/wc/work/junke_src/build/debug.CMakeErrorat/home/wc/software/cmake-3.26.3-linux-x86_64/share/cmak......
  • 行为型设计模式-备忘录 Memento
    简介允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态,该状态保存在对象之外,这样就可以不破坏原有对象的封装性了。角色Originator原发器即需要被保存状态的类抽象Memento备忘录类定义备忘录基本接口可以看做成是快照Snapshot具体Memento备忘录类实......
  • Centos7 安装cmake-绿色版
    下载Cmakewgethttps://cmake.org/files/v3.6/cmake-3.6.2.tar.gz解压Cmaketarxvfcmake-3.6.2.tar.gz&&cdcmake-3.6.2/编译版本安装方式:-----开始----编译安装cmake./bootstrapgmakegmakeinstall查看编译后的cmake版本/usr/local/bin/cmake--version移除原来的cmake版......
  • CMake生成Visual Studio工程
    CMake–生成VisualStudio工程C/C++项目经常使用CMake构建工具。CMake项目文件(例如CMakeLists.txt)可以直接由VisualStudio使用。本文要说明的是如何将CMake项目转换到VisualStudio解决方案(.sln)或项目(.vcxproj)开发环境为了生成VisualStudio解决方案,必须安装以下内......
  • 聊聊CMake和Makefile,并谢谢ChatGPT
    缘起和一个在公司里上班的姐姐聊天,她讲到自己配CMake环境有点崩溃,因为之前没有接触过这些。而我想起来第一次接触是在Games101的交流群里,看到有人问CMake的问题&求教程。后来暑假电赛训练的时候看队友提到过CMake,前几天也交流了一些CMake相关的东西。CMake的频繁出现让我决定......
  • QT编译时qmake和cmake的区别
    qMakeQT+=coreguiQT缺省使用了core和gui库变量TARGET描述了目标文件的名称,即生成的应用程序的名字,默认采用工程文件所在的文件夹名字。变量TEMPLATE描述了为建立目标文件而采用何种模板,即生成何种形式的Makefile文件,有以下5种模板:应用程序app,为建立一个Qt应用程......
  • 【ToolChains】CLion(VS2019) + CMake + Vcpkg 的使用
    参考博客:https://blog.51cto.com/u_15075510/4201238http://t.csdn.cn/pADDUhttps://zhuanlan.zhihu.com/p/454233496https://blog.csdn.net/weixin_43803955/article/details/123544106Vcpkg概述Vcpkg是微软社区开发的一个跨平台的C++包管理工具。它旨在解决C++......
  • 记录一个 qt+cmake 项目不生成 ui_xxx.h 文件的问题
    最近做一个Qt的项目的代码迁移到新平台,遇到一个问题。这个项目使用的CMake构建脚本,项目中的某个ui文件怎么都不能生成对应的ui_xxx.h文件,其他的文件都没有问题,使用qmake构建也没有问题。经过排查,问题原因如下:#include"ui_xxx.h"上面#include和后面的头文件之间没有空格......
  • 设计模式备忘录+命令模式实现Word撤销恢复操作
    文章目录前言思路代码实现uml类图总结前言最近学习设计模式行为型的模式,学到了备忘录模式提到这个模式可以记录一个对象的状态属性值,用于下次复用,于是便想到了我们在Windows系统上使用的撤销操作,于是便想着使用这个模式进行一次模仿复现思路以下是按照备忘录和命令模式结合的思路......
  • cmake 命令行带参数
    CMake命令行可以带有一些参数,用于控制和配置CMake的行为。这些参数可以在执行cmake命令时传递给CMake。以下是一些常用的CMake命令行参数:-D:用于设置CMake变量。例如,-DVAR_NAME=VALUE可以设置一个CMake变量的值cmake-DVAR_NAME=VALUEpath_to_source_directory-G......