首页 > 其他分享 >cmake使用笔记

cmake使用笔记

时间:2024-10-12 14:24:02浏览次数:1  
标签:选项 CMAKE .- 启用 CXX 笔记 FLAGS 使用 cmake

cmake_cxx_flags 常用值

在 CMake 中,CMAKE_CXX_FLAGS 是一个用于指定 C++ 编译器选项的变量。你可以将不同的编译选项添加到这个变量中,以影响编译过程的行为。以下是一些常用的 CMAKE_CXX_FLAGS 值及其说明:
1. 优化选项

  • 1.-O0:禁用优化(默认选项)。
  • 2.-O1:启用一级优化。
  • 3.-O2:启用二级优化(推荐用于生产)。
  • 4.-O3:启用三级优化,适用于对性能要求极高的程序。
  • 5.-Os:优化生成的代码大小。
  • 6.-Ofast:启用所有的优化,并可能不符合标准(如允许不精确的浮点运算)。

2. 警告和错误

  • 7.-Wall:启用所有常见的警告。
  • 8.-Wextra:启用额外的警告。
  • 9.-Werror:将所有警告视为错误。
  • 10.-Wpedantic:启用严格的标准遵循警告。

3. 调试选项

  • 11.-g:生成调试信息,通常在调试版本中使用。
  • 12.-g3:生成详细的调试信息。

4. 语言标准

  • 13.-std=c++11:启用 C++11 标准。
  • 14.-std=c++14:启用 C++14 标准。
  • 15.-std=c++17:启用 C++17 标准。
  • 16.-std=c++20:启用 C++20 标准。
  • 17.-std=gnu++11:启用 GNU 扩展的 C++11 标准。

5. 特定于平台的选项

  • 18.-m32:生成 32 位程序(在支持的系统上)。
  • 19.-m64:生成 64 位程序(在支持的系统上)。
  • 20.-fPIC:生成位置无关的代码,通常用于共享库。

6. 其他选项

  • 21.-fopenmp:启用 OpenMP 支持(并行编程)。
  • 22.-fsanitize=address:启用地址消毒(检测内存错误)。
  • 23.-fsanitize=undefined:启用未定义行为消毒。

示例
如果你想在 CMakeLists.txt 中设置这些选项,可以这样做:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wall -Wextra -g -std=c++17")

7. 设置构建类型
你还可以通过设置 CMAKE_BUILD_TYPE 来指定常用的构建选项:
set(CMAKE_BUILD_TYPE Release) # 对于优化
# or
set(CMAKE_BUILD_TYPE Debug) # 对于调试

8. 特定构建类型的标志
CMake 还提供了一些预定义的构建类型标志,可以在不同的构建类型中使用:
set(CMAKE_CXX_FLAGS_RELEASE "-O2") # Release 构建
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0") # Debug 构建
set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os") # MinSizeRel 构建
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g") # RelWithDebInfo 构建

总结
在 CMakeLists.txt 中,使用 CMAKE_CXX_FLAGS 可以根据项目需求灵活配置编译器选项,以优化编译过程并满足特定的开发需求。通过设置适当的标志,你可以控制编译过程中的优化级别、警告级别、调试信息等。

标签:选项,CMAKE,.-,启用,CXX,笔记,FLAGS,使用,cmake
From: https://www.cnblogs.com/qingyufei/p/18460455

相关文章

  • 【亲测可用】矢量图形处理软件Adobe Illustrator(AI2024)软件下载安装使用win/mac
    目录AdobeAI软件简介功能特点下载与安装下载:安装步骤:AdobeAI软件简介AdobeAI,全称AdobeIllustrator,是Adobe公司开发的一款专业的矢量图形处理软件。自1987年首次发布以来,AdobeIllustrator已成为行业标准之一,广泛应用于平面设计、UI设计、插画创作、印刷出版、海报......
  • iOS 在OC 中使用 AEC 的 ECB、CTR模式加解密
    实用实测过的代码。 AEC加解密网上一大把,简单列举一下。CTR模式,搜索了好多,试用了好几个都是代码不完全参数不对造成无法正常运行加解密。不同模式引用了不同的系统库路径。 调整加解密,修改参数 operation:kCCDecrypt/ kCCEncryptAECCTR模式解密#import<CommonCryp......
  • 瑞芯微RK3566/RK3568 Android11使用OTA升级固件方法,深圳触觉智能鸿蒙开发板演示,备战第
    本文介绍瑞芯微RK3562/RK3568在Android11系统OTA(U盘/TF卡)升级固件方法,使用的是触觉智能的PurplePiOH鸿蒙开源主板,搭载了瑞芯微RK3566芯片,类树莓派设计,是Laval官方社区主荐的一款鸿蒙开发主板。1、OTA包生成在源码根目录上执行以下命令编译OTA包makeinstallclean#make-j4#......
  • 使用密钥来和服务器通信
    前言一般情况下,我们要链接服务器除了三方的GUI工具如xshell、finalshell外。我们还会使用一些没有UI的终端去链接,比如windows的powerShell、mac的Terminal、ios的serverCat(非自带)和andriod的termius(非自带)等等。我们买的服务器一般都预装了openSSH(以及其依赖和OpenSSL),它就是......
  • 关于C/CPP使用结构体中位域的一些笔记
    工作中软件通讯用到了结构体,在解析时,对应第一个变量在高位还是低位一直记不住。故计此博客作为笔记typedefstruct_stBin{ BYTEbOne:2; BYTEbTwo:2; BYTEbThree:2; BYTEbFour:2; _stBin() { bOne=0; bTwo=0; bThree=0; bFour=0; }}stB......
  • Mybatis-Flex的增、删、改、查以及swagger (knife4J)的使用
    现代Java开发中,Mybatis-Flex是一个功能强大的Java持久层框架,使数据库操作高效灵活,而Swagger(Knife4J)则改善了API文档化与测试体验,两者结合能提高效率、增强协作、保证代码质量。本文将详细描述Mybatis-Flex增、删、改、查操作及与Swagger(Knife4J)协同使用,以下均已C......
  • FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
    ​喊了多年的互联网寒冬,今年的寒风格外凛冽,还在坚守安卓开发的朋友着实不容易。因为能转行的早就转了,能转岗的也早就转了,那么安卓程序员比较迷茫的就是,我该学什么安卓技术才好呢?还是直接扔了安卓再去搞别的技术吗?下面探讨下安卓程序员还能在哪些方面进阶修炼,主要有以下三个方向......
  • MathType安装及使用教程
    MathType安装及使用教程安装下载压缩包MathType_Crack_7.8.0.0.rar百度云盘提取码:81at解压软件包,得到如下文件右键以管理员方式运行MathType-win-zh-7.8.0.0.exe;选择目标文件夹,可更换其他文件夹;选择中文语言;替换文件,找到解压后的替换文件中的MathType.......
  • 神经网络与深度学习基础教程笔记(附案例讲解)
    神经网络与深度学习基础教程笔记(附案例讲解)引言神经网络和深度学习是人工智能领域中最重要的技术之一,它们在图像识别、自然语言处理、语音识别等领域取得了巨大的成功。本教程将从基础概念出发,逐步深入到高级主题,帮助你全面理解并掌握这些强大的工具。本文是神经网络与......
  • 什么是手机解锁?介绍最值得使用的10 个手机解锁服务
    解锁智能手机后,您可以在任何运营商的网络上使用它,从而为您提供更多选择和灵活性。有这么多解锁服务可供选择,要知道选择哪一种可能很棘手。本文根据可靠性、可负担性、交付时间和客户满意度介绍了最值得使用的10种手机解锁服务。什么是手机解锁?手机解锁可解除原运营商对......