如何使用Cmake生成debug版本和release版本的程序
来源:互联网 发布:excel如何查重复数据 编辑:程序博客网 时间:2024/06/06 19:07
在Visual Studio中我们可以生成debug版本和release版本的程序,使用Cmake我们也可以达到同样的效果。debug版本的项目生成的可执行文件需要有调试信息并且不需要进行优化,而release版本的不需要调试信息但是需要优化。这些特性在gcc/g++中通过编译时的参数来决定的,如果将优化程度调到最高需要设置 -O3 ,最低的是 -O0 即不做优化,添加调试信息的参数是 -g -ggdb,如果不添加这个参数,调试信息就不会被包含在生成的二进制中
CMake中有一个变量CMAKE_BUILD_TYPE,可以取值枚举入下:Debug Release RelWithDebInfo 和 MinSizeRel
当这个变量值为Debug的时候,Cmake会使用变量CMAKE_FLAGS_DEBUG 和 CMAKE_C_FLAGS_DEBUG中的字符串作为编译选项生成Makefile,
当这个变量值为Release的时候,工程会使用变量CMAKE_CXX_FLAGS_RELEASE和CMAKE_CFLAGS_RELEASE选项生成Makefile。
现在假设项目中只有一个文件main.cpp,下面是一个可以选择生成debug版和release版的程序的CMakeList.txt:
1 PROJECT(main)2 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)3 SET(CMAKE_SOURCE_DIR .)45 SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")6 SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")78 AUX_SOURCE_DIRECTORY(. DIR_SRCS)9 ADD_EXECUTABLE(main ${DIR_SRCS})
第 5 和 6 行设置了两个变量 CMAKE_CXX_FLAGS_DEBUG 和 CMAKE_CXX_FLAGS_RELEASE, 这两个变量是分别用于 debug 和 release 的编译选项。 编辑 CMakeList.txt 后需要执行 ccmake 命令生成 Makefile 。在进入项目的根目录,输入 "ccmake ." 进入一个图形化界面,如下图所示:
ccmake的界面
执行了configure后的ccmake的界面
CMakeFiles/main.dir/flags.make:CXX_FLAGS = -O0 -Wall -g -ggdb CMakeFiles/main.dir/link.txt:/usr/bin/c++ -O0 -Wall -g -ggdb CMakeFiles/main.dir/main.cpp.o -o main -rdynamic CMakeLists.txt:SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
这个结果说明生成的 Makefile 中使用了变量 CMAKE_CXX_FLAGS_DEBUG 作为编译时的参数。
find * | xargs grep "O0"的执行结果
CMakeLists.txt:SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
而执行命令 find * | xargs grep "O3" 后结果如下:CMakeCache.txt:CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUGCMakeCache.txt:CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUGCMakeFiles/main.dir/flags.make:CXX_FLAGS = -O3 -Wall CMakeFiles/main.dir/link.txt:/usr/bin/c++ -O3 -Wall CMakeFiles/main.dir/main.cpp.o -o main -rdynamic CMakeLists.txt:SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
- 如何使用Cmake生成debug版本和release版本的程序
- 程序的Debug 版本和Release 版本
- C#如何生成release版本的程序,生成debug版本的程序
- C#.NET常见问题(FAQ)-如何生成release版本的程序,生成debug版本的程序
- 如何使用VC++调试程序 Debug版本与Release版本
- 如何使用VC++调试程序 Debug版本与Release版本
- cmake编译Debug和Release版本的注意点
- Cmake:生成 debug 版和 release 版的程序
- CMake区分debug、release版本
- CMAKE 编译Debug/Release版本
- 如何让debug版本和release版本的签名一致
- Debug版本和Release版本的区别
- DEBUG版本和RELEASE版本的问题
- debug版本和release版本的区别
- debug版本和release版本的区别
- Debug版本和Release版本的区别
- 关于程序的Debug和Release版本的注意
- 使用Release库的Debug版本调式程序
- 浅谈platform设备模型
- 内核定时器
- android中finish(),exit()的区别
- 枚举与宏的区别
- 34、程序管理器--显示卸载、启动、分享的PopupWindow界面设计
- 如何使用Cmake生成debug版本和release版本的程序
- Linux 安装 ssh
- 3.DispatcherServlet作用
- iReport导出Excel不分页
- 求奇数只和
- set 简单用法
- android_项目_知识积累_mina通信(android手机登录功能)
- Linux下sort命令小结
- MySQL索引类型一览 让MySQL高效运行起来