CMake + qtcreator + MinGW +调试模式+ Windows 7

时间:2013-11-11 17:48:50

标签: c++ c++11 cmake mingw qt-creator

我在Windows 7下使用CMakeVC++,一切正常。现在,我想测试qtcreator,但我不能强制调试标志。我正在使用MinGW生成器和cmake并在命令行上添加-DCMAKE_BUILD_TYPE=Debug

我可以使用QTCreator内部的CMake功能生成-DCMAKE_BUILD_TYPE=Debug的项目。它编译得很好,我可以运行它。但是,我无法调试它,因为QTCreator抱怨它不是“可调试的执行”。我还尝试使用命令行直接生成项目。

我做错了什么?

4 个答案:

答案 0 :(得分:2)

很难弄清楚出了什么问题,所以我会给你一些提示:

  1. 在CMakeChace.txt文件中设置CMAKE_VERBOSE_MAKEFILE并再次运行cmake。然后拨打make cleanmake。然后检查输出并检查传递给编译器的标志。

  2. 检查CMakeCache.txt文件以查找为特定版本传递给编译器的标志。检查是否为调试模式传递了-g和-O0。

  3. 尝试构建一个非常简单的程序,并使用-g和-O0手动编译它。然后尝试使用gdb和QtCreator(作为外部应用程序)对其进行调试,并检查QtCreator本身或编译器选项是否存在问题。

答案 1 :(得分:2)

我今天遇到这个问题就像你一样。很可能你使用VS CDB而不是GDB。

这是我的解决方案:

(0)从http://mingw-w64.sourceforge.net/index.php

下载MinGW和GCC

(1)设置环境变量,因此Qt-creator可以自动检测MinGW和GCC

设置MINGW_DIR 将%MINGW_DIR%添加到PATH

(2)重新启动Qt-creator

open Qt-creator - >工具 - >选项 - >构建与安培;运行 - >试剂盒

手动添加" MinGW-GCC" (或其他你喜欢的名字)

检查编译器,gcc应自动检测

设置Debugger - >编辑:GDB Engine并选择gdb.exe文件夹

确保未使用CDB

答案 2 :(得分:1)

我认为你没有做错任何事。

在调试模式下使用MSVC时,调试符号(* .pdb文件)生成在与构建的二进制文件相同的文件夹中。稍后可以使用它们来调试应用程序。

使用MingW时,不会生成其他文件。将CMAKE_BUILD_TYPE配置为DebugRelWithDebInfo时,选项-g将添加到编译命令行。这会在二进制文件中生成调试信息。然后,您将能够使用GDB调试您的程序(您可以在Qt Creator中尝试它,它可以工作;)

您可以通过更改CMAKE_BUILD_TYPE值并检查生成的二进制文件的大小来验证这一点。我只是测试我的一个项目:

CMAKE_BUILD_TYPE                      Executable size
<empty>                                   1890 Ko
Release                                   1281 Ko
Debug                                    14743 Ko
MinSizeRel                                1027 Ko
RelWithDebInfo                           15859 Ko

答案 3 :(得分:0)

我对QtCreator不太熟悉,但我会尝试通过解释我曾经为Eclipse CDT4生成makefile的方法来帮助(这可能是你尝试作为Windows IDE的另一种选择)。

首先,您确定您的cmake可以生成QtCreator makefile吗?我问,因为至少在Fedora上,cmake没有列出Qtcreator作为选项。

在命令行上键入“cmake”应列出适用于您的平台的生成器。 QtCreator是其中之一吗?

其次,cmake很可能没有为您的编译器提供该选项。这并不一定意味着您将无法从该编译器调试代码。例如,我在没有设置调试标志的情况下为Eclipse CDT生成了文件,但我仍然能够正常调试。

作为参考,这里是我用于Eclipse CDT的命令列表(来自项目根目录,cmakelists.txt文件位于src子目录中):

mkdir eclipse-project
cd eclipse-project
cmake ../src -G "Eclipse CDT - Unix Makefiles"

然后我可以从Eclipse打开项目并进行调试。我怀疑你是否能够做同样的事情,cmake是否知道如何为你的编译器启用调试。