【问题标题】:CMake + qtcreator + MinGW + Debug mode + Windows 7CMake + qtcreator + MinGW + 调试模式 + Windows 7
【发布时间】:2013-11-11 17:48:50
【问题描述】:

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

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

我做错了什么?

【问题讨论】:

  • 您是要编译基于 Qt 的代码还是只编译没有 Qt 类的 C++ 代码?
  • @QtBlueWaffle:没有 Qt 类的 C++11 代码。我需要使用 MinGW,这就是我需要 QTCreator 的原因。
  • 嗯,我不明白你为什么需要 Qt Creator 来用 mingw 编译 c++ 代码。你不能直接使用g++吗? mingw.org/wiki/MinGWforFirstTimeUsers 。 Qt Creator 致力于基于 Qt 的代码 + UI 设计 OMHO
  • 因为后面需要编辑,还要测试QTCreator。
  • 您是如何确定未设置调试标志的?您确定不应该使用 CodeBlocks 生成器来生成 QtCreator 可以理解的项目文件吗?

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 非常感谢您的提示。我会试着看看发生了什么。
【解决方案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

打开Qt-creator -> tools->options->Build&Run->kits

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

检查编译器,gcc 应该会被自动检测到

set Debugger ->Edit : GDB Engine 并选择gdb.exe所在的文件夹

确保没有使用 CDB

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 所以你的意思是你可以用 CMake 生成一个 MinGW 项目,然后用 QTcreator 编译它并在 QTCreator 中调试?您能否提供从 CMake 开始的详细步骤?
    • 您必须确保您的 MingW 编译器已在 QtCreator 选项中注册,并验证您有一个使用此编译器配置的套件(例如,将您的套件命名为 MingW 4.8)。在 QC 中,文件 > 打开文件或项目,选择磁盘上的 CMakeLists.txt。单击下一步,选择您的工具包(“生成器”),然后选择“运行 CMake”。您的项目应该在 Qt Creator 中配置。
    • 可以在qt-project.org/doc/qtcreator-2.6/creator-project-cmake.html上找到一个很好的附加步骤
    • 我已经在使用 MinGW 将我的项目从 CMake 编译到 QTcreator 以用于最终应用程序。但是,QTCreator 不会让我调试我的应用程序,说这不是我的可执行文件的调试版本。所以再一次,如果你有一个 CMakeLists.txt 文件,你可以在 QTCreator 中使用它来生成一个“MinGW 项目”,编译它并调试它,在你的答案中详细说明你的步骤会很棒。谢谢。
    • 如果您更详细地说明您尝试编译项目所遵循的步骤,我们回答您可能会很有用。我一步一步详细介绍了如何在 QT Creator 中打开 CMake 项目。我也回答你的问题:MingW 编译器直接在二进制文件中生成调试符号。所以如果你没有成功调试你的程序,你就错过了一些东西。不要对试图帮助你的人居高临下。稍微努力解释一下你到底做了什么,也许会有人帮助你......
    【解决方案4】:

    我对 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 是否知道如何为你的编译器启用调试。

    【讨论】:

    • Qt Creator 有自己的界面来运行 CMake。 CMake 中没有 QtCreator 生成器。要在 QtCreator 中打开 CMake 项目,一切都在 QtCreator 中完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 2022-11-18
    • 2013-08-03
    • 2021-12-23
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多