首页 > 其他分享 >CMake 编译选项设置

CMake 编译选项设置

时间:2023-04-18 17:01:38浏览次数:50  
标签:选项 CMAKE CXX 编译 FLAGS RELEASE CMake

链接:https://blog.csdn.net/Huoon/article/details/108520571

在CMakeLists.txt中可以通过修改CMake内置的环境变量来改变C或C++的编译选项.

编译选项相关的CMake 变量如下:

CMAKE_C_FLAGS = 
CMAKE_C_FLAGS_DEBUG = -g
CMAKE_C_FLAGS_MINSIZEREL = -Os -DNDEBUG
CMAKE_C_FLAGS_RELEASE = -O3 -DNDEBUG
CMAKE_C_FLAGS_RELWITHDEBINFO = -O2 -g -DNDEBUG

CMAKE_CXX_FLAGS = 
CMAKE_CXX_FLAGS_DEBUG = -g
CMAKE_CXX_FLAGS_MINSIZEREL = -Os -DNDEBUG
CMAKE_CXX_FLAGS_RELEASE = -O3 -DNDEBUG
CMAKE_CXX_FLAGS_RELWITHDEBINFO = -O2 -g -DNDEBUG

等号右边是通过在CMakeLists.txt中打印对应变量得到的默认值。

对于C语言设置CMAKE_C_FLAGS相关参数,C++语言设置CMAKE_CXX_FLAGS相关参数。并且分为DEBUG,RELEASE,MINSIZEREL和RELWITHDEBINFO四种类型。

以C++语言编译选项为例:

CMAKE_CXX_FLAGS_DEBUG:编译Debug版本的时候会采用的编译选项,默认只有一个-g选项,包含调试信息;

CMAKE_CXX_FLAGS_RELEASE:编译Release版本的时候采用的编译选项,默认包-O3选项,该选项表示优化等级;

CMAKE_CXX_FLAGS_MINSIZEREL:主要减小目标文件大小,选项-Os就是这个作用;

CMAKE_CXX_FLAGS_RELWITHDEBINFO:包含调试信息的Release版本,-O2和-g,优化的同时也包含了调试信息;

CMAKE_CXX_FLAGS:这个选项没有默认值;

顾名思义,当CMake在编译项目的时候,选项为Debug则会采用CMAKE_CXX_FLAGS_DEBUG选项,编译Release则会采用CMAKE_CXX_FLAGS_RELEASE选项,因此,需要设置编译选项的时候,在CMakeLists.txt中设置这些变量就可以了。

实际上可以分别设置CMAKE_CXX_FLAGS_DEBUG和CMAKE_CXX_FLAGS_RELEASE,如下:

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++11 -Wl,-rpath=../lib")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++11 -g")

上面的设置两个都有-std=c++11,这个选项是一个公共的选项,不管是Release还是Debug都需要设置。这种情况还可以把公共的设置放在CMAKE_CXX_FLAGS变量里面,如下:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}  -Wl,-rpath=../lib")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -g")

因为在最终编译的时候的编译选项不管是Release还是Debug都包含了CMAKE_CXX_FLAGS这个变量。

标签:选项,CMAKE,CXX,编译,FLAGS,RELEASE,CMake
From: https://www.cnblogs.com/minding/p/17330260.html

相关文章

  • 编译异常和运行异常
     编译时期异常:Java只检查语法错误和数据优化,不会运行代码,只要是提醒程序员检查本地信息运行时异常:代码出现了错误 ......
  • 如何将 shell 脚本编译成二进制执行文件
    一、说明很多人写了一些shell脚本,想给其他人用但是又不想公开源代码,所以就要对shell脚本进行加密处理,那么我们可以Shell脚本编译器工具(SHC),使用shc将bash/shell脚本编译为二进制文件,隐藏源代码并防止被被人修改的功能。由于在大多数操作系统上默认是不安装的,因此需要手......
  • 如何运行编译.NetCore的源码?
    作为.net的开发人员,为了能更好的code,我们要知其然并知其所以然,了解.netcore的源码是我们的基本素养✊源码地址.NETPlatform(github.com)这个是.net在github上开源的源码地址aspnetcore这个是.netcore的源码地址构建方法构建有几点需要注意一下:构建比较费时间,可以......
  • 记录一下工作中遇见的geoserver项目编译不成功和开源团队沟通解决问题的bug
    文件地址:org.geoserver.wcs.kvp.rangesubset.AbstractContentNode最近公司需要一些geoserver的定制化修改开发,但是在build项目的时候,发现这个Node是没有import的,我网上看了下,有的是直接引入的上面我注释掉的,---这是错误的做法,我根据这个问题和开源官方直接沟通得知是使用的下面......
  • MATLAB2022b + win10 + cuda12.0 + matconvnet GPU编译
    我使用的是visualstudio2017 具体参考:https://blog.csdn.net/amyliu5200/article/details/120717854?spm=1001.2014.3001.5506但是其中我直接使用了: vl_compilenn('enableGpu',true)然后配置成功后:vl_testnn('gpu',true)则会出现:   ......
  • JAVAC编译流程
    目录Javac编译过程入口java源代码词法分析->token流语法分析->抽象语法树语义分析->标注语法树AttrFlowLower代码生成->字节码Javac编译过程入口来源:com.sun.tools.javac.main.Main#compile(java.lang.String[])publicintcompile(String[]args){//创......
  • UNIX环境高级编程 第三版 源代码编译及使用
    UNIX环境高级编程(第3版)中的代码示例多次包含了一下头文件:#include"apue.h"搜索发现原来这个头文件是作者自定义的一个文件,并在官网提供了源代码供下载。下载之后解压该文件:tar-zxfsrc.3e.tar.gz进入文件夹并编译:cdapue.3emake等待结束,如果没有报错就成功了。(如......
  • graphhopper-ios 编译过程详解
    一、写在前面GraphHopper是一个快速且高效的路径规划引擎,它默认使用OpenStreetMap和GTFS数据,也可以导入其他数据源。它可以用作java库或独立的web服务器,去计算两个或多个点之间的线路的距离,时间,转弯指令和许多道路属性。除了“A-to-B”的路径规划能力之外,它还支持“snaptoro......
  • 每天打卡一小时 第八天 编译四部曲
     第一部曲自然语言 建立结构体存储身高性别定义结构体变量游历结构体选择输出 第二部曲流程图  第三部曲代码#include<iostream>#include<iomanip>usingnamespacestd;structREN{charsex;doublehight;};intmain(){i......
  • Java语言特点?编译与解释并存?
    Java语言特点:·面向对象(封装,继承,多态);·平台无关性(Java虚拟机实现平台无关性);·支持多线程(C++语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而Java语言却提供了多线程支持);·支持网络编程并且很方便(Java语言诞生本身就是为简化网络......