1 需求

现在已经有一个cmake工程,我想要添加-O0 -g,生成gdb的调试信息和不进行代码优化。

也就是说,我该怎样修改CFLAGS和CPPFLAGS?

2 在project后面添加

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g")

关于CMAKE_C_FLAGS

它将这里设置的-O0 -g追加到CFLAGS前面。这样不能解决问题,因为默认原来会有-O3,会覆盖前面刚刚加的-O0。

这个不分debug和release。

3 CFLAGS有多个相同的编译选项,哪个生效呢?

比如-O0 -O3同时存在。

后面的会覆盖前面的。

gcc -O0 -O3 test.c -o test,则执行O3优化

gcc -O3 -O0 test.c -o test,不执行优化

4 最好的解决办法

如果是编译release版本的话,

mkdir Release

cd Release

cmake -DCMAKE_BUILD_TYPE=Release ..

make

如果是编译debug版本的话,

mkdir Debug

cd Debug

cmake -DCMAKE_BUILD_TYPE=Debug ..

make

这里CMAKE_C_FLAGS_DEBUG默认只是有一个“-g”,所以,可以在此基础上添加优化选项

set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")

set(CMAKE_C_FLAGS_Release "${CMAKE_C_FLAGS_Release} -O3")

cmake编译选项的更多相关文章

  1. MySQL CMake参数说明手册

    MySQL自5.5版本以后,就开始使用CMake编译工具了,因此,你在安装源文件中找不到configure文件是正常的.很多人下到了新版的MySQL,因为找不到configure文件,不知道该怎么继续 ...

  2. mysql CMAKE 参数说明

    MySQL自5.5版本以后,就开始使用CMake编译工具了,因此,你在安装源文件中找不到configure文件是正常的.很多人下到了新版的MySQL,因为找不到configure文件,不知道该怎么继续 ...

  3. CentOS 6.x安装多GCC版本号,cmake的安装与使用

    操作系统:CentOS release 6.5 (Final) 当前gcc版本号:build=x86_64-redhat-linux                           Thread ...

  4. MySQL服务 - MySQL 5.5编译安装

    cmake介绍: MySQL 5.5之后,所有的编译操作都通过cmake进行,使用cmake最大的好处是其独立于源码(out-of-source)的编译功能,即编译工作可以在另一个指定的目录中而非源码 ...

  5. Centos 7环境下编译mysql 5.7

    首先在编译之前,我们要了解相关mysql 5.7的编译选项,官网编译选项地址:http://dev.mysql.com/doc/refman/5.7/en/source-configuration-o ...

  6. OpenCV多版本管理

    OpenCV在Ubuntu下经常会安装多个版本,比如默认版本,自己安装的,ros安装的等等.有时候需要给程序指定某个OpenCV版本,网上有一些方法,但还是会遇到很多问题. 这里提供一种选择,即指定O ...

  7. Linux下MySQL 5.6.24的编译安装与部署

    MySQL 5.6正式版发布了,相对于5.5版本作出了不少改进,其源码安装配置方式也有所变化,本文根据实际操作,不断尝试,精确还原了安装的具体步骤. 在Linux下安装MySQL前,先确认卸载系统自带 ...

  8. CMakeLists.txt编写常用命令

    目录 1. 设置cmake最小版本 2. 设置项目名称 3. 设置编译目标类型 4. 指定编译包含的源文件 1. 明确指明包含的源文件 2. 搜索指定目录的所有的cpp文件 3. 自定义搜索规则 4. ...

  9. OpenCV2.4.8 + CUDA7.5 + VS2013 配置

    配置过程主要参考:https://initialneil.wordpress.com/2014/09/25/opencv-2-4-9-cuda-6-5-visual-studio-2013/ 1.为什 ...

随机推荐

  1. 《memcached全面剖析》

    第1章 memcached的基础 1.1 memcached是什么? memcached是高性能的分布式内存缓存服务器. 一般的做法是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态web应用 ...

  2. 利用pandas进行数据分析之三:DataFrame与Series基本功能

    未经同意请勿转载http://www.cnblogs.com/smallcrystal/ 前文已经详细介绍DataFrame与Series两种数据结构,下面介绍DataFrame与Series的数据基 ...

  3. linux 单机跨进程通信

    一般来说通过网络通信(比如tcp,udp)或者共享内存的方式肯定可以实现跨进程通信,但现在这里要说的是比较偏但实用的几个方法:利用unix域通信(普通网络连接),利用unix域通信(socketpai ...

  4. nginx中ngx_list的数据结构

    今天没事了,在查看nginx源代码中看到ngx_list的结构,发现设计为链表数组的形式,不知道为什么这样设计 struct ngx_list_part_s { void *elts;//指向数组的起 ...

  5. 使用scp免passwordserver间传递文件

    1.aserver下执行命令  ssh-keygen -t rsa 2.三个回车 3.在用户的文件夹下 ~/.ssh/产生两个文件,id_rsa,id_rsa.pub 4.把aserver下相应的文件 ...

  6. 43. Spring Boot动态数据源(多数据源自动切换)【从零开始学Spring Boot】

    [视频&交流平台] àSpringBoot视频 http://study.163.com/course/introduction.htm?courseId=1004329008&utm ...

  7. 让你的程序通过XP防火墙

    procedure TForm1.Button1Click(Sender: TObject); var FwMgr,Profile,FwApp: variant; begin FwMgr := Cre ...

  8. DataUml Design 教程6-DataUML Design 1.1版本正式发布(支持PD数据模型)

    从DataUML Design正式发布到现在有两个月了,由于最近比较忙,到现在才发布1.1版本.以后本人会一直坚持不断完善DataUML Design软件,希望广大程序猿们多多支持. 一.1.1版本新 ...

  9. LeetCode560. Subarray Sum Equals K

    Description Given an array of integers and an integer k, you need to find the total number of contin ...

  10. AAC终结者Opus音频编码器的瑞士军刀,编译android ios

    AAC-LD/ELD it is either 480 or 512 PCM samples per frame and channel. http://opus-codec.org/download ...