CMake + qtcreator + MinGW + Debug mode + Windows 7

CMake + qtcreator + MinGW + Debug mode + Windows 7

本文关键字:Windows mode MinGW qtcreator CMake Debug      更新时间:2023-10-16

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

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

我做错了什么?

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

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

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

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

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

这是我的解决方案:

(0) 从 http://mingw-w64.sourceforge.net/index.php 下载MinGW和GCC

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

设置MINGW_DIR将 %MINGW_DIR% 添加到路径

(2) 重启Qt-creator

打开Qt-creator->工具->选项->构建和运行->工具包

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

检查编译器,GCC 应该自动检测

设置调试器 ->编辑:GDB 引擎并选择 gdb 的文件夹.exe

确保未使用CDB

我认为你没有做错什么。

在调试模式下使用 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

我对QtCreator不太熟悉,但我会尝试通过解释我用来为Eclipse CDT4生成makefile的内容来提供帮助(这可能是您尝试作为Windows IDE的另一个选项)。

首先,你确定你的cmake可以生成QtCreator makefiles吗?我问是因为至少在Fedora上,cmake没有将Qtcreator列为选项。

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

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

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

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

然后我可以从 Eclipse 打开项目并进行调试。我怀疑你也能做到这一点,无论 cmake 是否知道如何为编译器启用调试。