使用 cmake 生成 debug 版和 release 版的程序
在 Visual Studio 中我们可以生成 debug 版和 release 版的程序,使用 CMake 我们也可以达到上述效果。debug 版的项目生成的可执行文件需要有调试信息并且不需要进行优化,而 release 版的不需要调试信息但需要优化。这些特性在 gcc/g++ 中是通过编译时的参数来决定的,如果将优化程度调到最高需要设置参数-O3,最低是 -O0 即不做优化;添加调试信息的参数是 -g -ggdb ,如果不添加这个参数,调试信息就不会被包含在生成的二进制文件中。
CMake 中有一个变量 CMAKE_BUILD_TYPE ,可以的取值是 Debug Release RelWithDebInfo 和 MinSizeRel。当这个变量值为 Debug 的时候,CMake 会使用变量 CMAKE_CXX_FLAGS_DEBUG 和 CMAKE_C_FLAGS_DEBUG 中的字符串作为编译选项生成 Makefile ,当这个变量值为 Release 的时候,工程会使用变量 CMAKE_CXX_FLAGS_RELEASE 和 CMAKE_C_FLAGS_RELEASE 选项生成 Makefile。
现假设项目中只有一个文件 main.cpp ,下面是一个可以选择生成 debug 版和 release 版的程序的 CMakeList.txt :
1 PROJECT(main) 2 CMAKE_MINIMUM_REQUIRED(VERSION 2.6) 3 SET(CMAKE_SOURCE_DIR .) 4 5 SET(CMAKE_CXX_FLAGS_DEBUG “\(ENV{CXXFLAGS} -O0 -Wall -g -ggdb") 6 SET(CMAKE_CXX_FLAGS_RELEASE "\)ENV{CXXFLAGS} -O3 -Wall”) 7 8 AUX_SOURCE_DIRECTORY(. DIR_SRCS) 9 ADD_EXECUTABLE(main \({DIR_SRCS}) </pre> </td> </tr> </tbody> </div> <p> </p> <p> 第 5 和 6 行设置了两个变量 CMAKE_CXX_FLAGS_DEBUG 和 CMAKE_CXX_FLAGS_RELEASE, 这两个变量是分别用于 debug 和 release 的编译选项。编辑 CMakeList.txt 后需要执行 ccmake 命令生成 Makefile 。在进入项目的根目录,输入 "ccmake ." 进入一个图形化界面,如下图所示:</p> <p> 图 5. ccmake 的界面</p> <p> </p> <p align="center"><img src="http://linux.chinaitlab.com/UploadFiles_7565//.JPG" alt="ccmake 的界面" width="454" height="306"></p> <p> </p> <p> 按照界面中的提示进行操作,按 "c" 进行 configure ,这时界面中显示出了配置变量 CMAKE_BUILD_TYPE 的条目。如下图所示:</p> <p> 图 6. 执行了 configure 以后 ccmake 的界面</p> <p> </p> <p align="center"><img src="http://linux.chinaitlab.com/UploadFiles_7565//.JPG" alt="执行了 configure 以后 ccmake 的界面" width="454" height="306"></p> <p> </p> <p> 下面我们首先生成 Debug 版的 Makefile :将变量 CMAKE_BUILD_TYPE 设置为 Debug ,按 "c" 进行 configure ,按 "g" 生成 Makefile 并退出。这时执行命令 find * | xargs grep "O0" 后结果如下:</p> <p> 清单 8 find * | xargs grep "O0"的执行结果</p> <p> </p> <div style="width: 80%" border="1" cellspacing="0" cellpadding="1" align="center" bgcolor="#FFFFFF"> <tbody> <tr> <td> <pre>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 作为编译时的参数。
下面我们将生成 Release 版的 Makefile :再次执行命令 “ccmake .” 将变量CMAKE_BUILD_TYPE 设置为 Release ,生成 Makefile 并退出。执行命令 find * | xargs grep “O0” 后结果如下:
清单 9 find * | xargs grep “O0”的执行结果

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/201443.html