cmake 如何编译成debug版?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cmake 如何编译成debug版?相关的知识,希望对你有一定的参考价值。

在学习cmake。编译成功了。但是生成的程序不能gdb,不是debug的。我想知道是不是cmake的时候需要加参数,还是CMakeLists需要修改什么才能使程序变成debug版的

回复 7# qfmeal 这些参数是make工具的,--debug 只会让make在调用编译器gcc/g++干活的时候打印更多的东西,让你看到它详细的分析和处理指令的过程。 参考技术A 谢谢 可以了。就是这个变量。SET( CMAKE_BUILD_TYPE Debug ) 参考技术B ……好像没有。Makefile里面也没有

CMake基础教程cmake生成debug和release两个版本程序(如何编译-g版本)

本文是历史经验总结,对你绝对有很大的帮助。这是cmake的一个神坑。

可以通过设置变量CMAKE_BUILD_TYPE生成 debug 版和 release 版的程序。

该变量可以的取值是 Debug Release RelWithDebInfo 和 MinSizeRel。当这个变量值为 Debug 的时候,CMake 会使用变量CMAKE_CXX_FLAGS_DEBUGCMAKE_C_FLAGS_DEBUG 中的字符串作为编译选项生成 Makefile,当这个变量值为 Release 的时候,工程会使用变量CMAKE_CXX_FLAGS_RELEASECMAKE_C_FLAGS_RELEASE 选项生成 Makefile。

所谓的生成debug和release两个版本的程序,只是决定了CMake会取哪个变量作为编译选项,如果我们没有给这些变量赋值,那么即使设置了Debug版本,编译出来也没啥区别。

现假设项目中只有一个文件 main.cpp ,下面是一个可以选择生成 debug 版和 release 版的程序的 CMakeLists.txt :

PROJECT(main)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
SET(CMAKE_SOURCE_DIR .)

SET(CMAKE_CXX_FLAGS_DEBUG "$ENVCXXFLAGS -O0 -Wall -g -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENVCXXFLAGS -O3 -Wall")

AUX_SOURCE_DIRECTORY(. DIR_SRCS)
ADD_EXECUTABLE(main $DIR_SRCS)

第 5 和 6 行设置了两个变量

以上是关于cmake 如何编译成debug版?的主要内容,如果未能解决你的问题,请参考以下文章

CMake系列:问题解决点滴记录

CMake系列:问题解决点滴记录

如何通过cmake用-fPIC编译jsoncpp

如何使用Cmake生成debug版本和release版本的程序

CMake 默认编译链接选项

CMake post-build-event:复制已编译的库