windows下Qt软件调试-cmake | qmake配置 qBreakpad定位崩溃位置

1、环境

Windows10/11
Qt版本:Qt5.12.5
编译器版本:msvc2019_64

2、源码

下载qBreakpad:

git clone https://gitcode.com/buzzySmile/qBreakpad.git

下载breakpad:

git clone https://gitcode.com/google/breakpad.git

下载linux-syscall-support:

git clone https://gitcode.com/ithaibo/linux-syscall-support.git

3、qmake测试以及使用qBreakpad

参考链接:https://blog.youkuaiyun.com/qq_43627907/article/details/126603907

注意:在release模式下,若没生成dmp文件,可能是因为安装了搜狗输入法!!!

通过打印信息,打开文件夹“E:\搜狗浏览器\SogouInput\Components\crash”,
在这里插入图片描述
发现qBreakPad生成的dmp文件记录到文件夹“E:\搜狗浏览器\SogouInput\Components\crash”下的crash.dmp里。

4、cmake配置qBreakpad

我们可以通过qmake获取qBreakpad.lib,所以在这里用静态库的方式使用qBreakpad。

步骤一、文件整理

将生成的lib文件以及使用到的头文件整理如下:
在这里插入图片描述
将qBreakpad\handler下的singletone、QBreakpadHandler.h和QBreakpadHttpUploader.h复制到include。

qmake在debug和release下生成的lib放到对应的lib\debug和lib\release。

将整理好的qBreakpad复制到你的项目里。

步骤二、cmake配置

#只在构建时 引入的头文件,为不对外开放的三方库
target_include_directories(${PROJECT_NAME} PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/qBreakpad/include>
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/qBreakpad/include/singletone>
)
if(WIN32)
    # 首先,确保设置了 CMAKE_BUILD_TYPE
    if(NOT DEFINED CMAKE_BUILD_TYPE)
        set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE)
    endif()

    if(CMAKE_BUILD_TYPE MATCHES Debug)
        message(STATUS "Debug build configuration")
        target_link_libraries(${PROJECT_NAME} PUBLIC
            ${CMAKE_CURRENT_SOURCE_DIR}/qBreakpad/lib/debug/qBreakpad.lib
        )
elseif(CMAKE_BUILD_TYPE MATCHES Release)
    message(STATUS "Release build configuration")
    # 设置编译选项,以在Release模式下也生成PDB文件
    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")
    set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF")
    target_link_libraries(${PROJECT_NAME} PUBLIC
        ${CMAKE_CURRENT_SOURCE_DIR}/qBreakpad/lib/release/qBreakpad.lib
    )
else()
    message(STATUS "Unknown build type: ${CMAKE_BUILD_TYPE}")
endif()	

参考链接
https://blog.youkuaiyun.com/kangkanglhb88008/article/details/133864909

<think>好的,我现在需要回答用户关于QtCMakeQMake的问题。用户之前已经询问过OpenCV与Qt6的结合使用,现在转向构建工具,可能是在实际项目中遇到了构建配置的问题,或者想了解如何选择适合的工具。 首先,我需要明确CMakeQMake各自的定义和用途。QMakeQt官方早期的构建工具,专门为Qt项目设计,而CMake是一个更通用的跨平台构建系统,近年来被Qt官方推荐使用,尤其是Qt6之后。 接下来,要比较两者的区别,包括语法、功能、跨平台支持、社区生态等方面。用户可能关心如何迁移项目,或者新项目该选哪个。需要提到Qt6对CMake的支持增强,以及QMake可能逐渐被弃用的趋势。 还要给出实际的使用示例,比如基本的CMakeLists.txt和.pro文件,让用户有直观的认识。同时,迁移指南和适用场景分析对用户做决策有帮助。 需要注意用户可能的疑惑点,比如为什么Qt转向CMakeCMake是否复杂,如何处理现有的QMake项目等。在回答中要简明扼要地解释这些点,避免技术术语过多,保持易懂。 最后,确保回答结构清晰,分点列出,符合之前的格式要求,使用中文,并且LaTeX格式正确。检查是否有遗漏的重要信息,比如版本兼容性、常见问题解决等。</think>以下是关于 QtCMakeQMake 的详细对比说明: --- ### **一、核心定位对比** | 特性 | QMake | CMake | |--------------------|------------------------------------|------------------------------------| | **开发背景** | Qt 官方早期专用构建工具 (2001) | 跨平台通用构建系统 (2000) | | **语法风格** | 类 Prolog 的 `.pro` 文件 | 类 Python 的 `CMakeLists.txt` | | **设计目标** | 专为 Qt 项目优化 | 通用项目构建,支持多种框架组合 | | **Qt 官方支持** | Qt5 默认,Qt6 逐步弱化 | Qt6 官方推荐构建工具 | --- ### **二、关键功能差异** #### **1. 依赖管理** - **QMake** ```qmake QT += core gui widgets LIBS += -lopencv_core -lopencv_highgui ``` 显式声明 Qt 模块和第三方库 - **CMake** ```cmake find_package(Qt6 COMPONENTS Core Gui Widgets REQUIRED) find_package(OpenCV REQUIRED) target_link_libraries(myapp Qt6::Core Qt6::Gui ${OpenCV_LIBS}) ``` 支持更智能的依赖查找和版本控制 #### **2. 跨平台支持** - **QMake** 自动生成平台特定构建文件(VS工程/Xcode项目) 但处理复杂项目时易出现路径问题 - **CMake** 支持生成 Ninja/MSBuild/Xcode/Makefile 等多种后端 提供更精细的交叉编译控制 #### **3. 扩展能力** | 能力 | QMake | CMake | |--------------------|-------------|----------------| | 自定义函数 | 有限 | 支持完整函数编程 | | 条件编译 | 基础条件判断 | 支持复杂逻辑表达式 | | 子项目管理 | SUBDIRS 模板 | 独立的 add_subdirectory | | 第三方集成 | 需要手动配置 | 内置 FindPackage 机制 | --- ### **三、典型项目配置示例** #### **QMake (.pro)** ```qmake QT += core gui TARGET = MyApp TEMPLATE = app SOURCES += main.cpp widget.cpp HEADERS += widget.h RESOURCES += icons.qrc ``` #### **CMake (CMakeLists.txt)** ```cmake cmake_minimum_required(VERSION 3.16) project(MyApp LANGUAGES CXX) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) find_package(Qt6 COMPONENTS Core Gui Widgets REQUIRED) add_executable(myapp main.cpp widget.cpp widget.h icons.qrc ) target_link_libraries(myapp PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets) ``` --- ### **四、迁移与选择建议** #### **何时使用 QMake** - 维护遗留 Qt5 项目 - 开发简单单模块应用 - 需要快速原型验证 #### **何时选择 CMake** - 新建 Qt6 项目 - 多模块/多语言混合开发(如 C++ + Python) - 需要集成非 Qt 库(如 OpenCV/VTK) - 要求精细控制构建过程 #### **迁移指南** 1. 使用 `qmake2cmake` 工具转换已有项目 ```bash qmake2cmake --minimum-version 3.16 MyProject.pro ``` 2. 手动调整: - 将 `QT +=` 转换为 `find_package(Qt6 COMPONENTS ...)` - 替换 `INCLUDEPATH` 为 `target_include_directories` - 转换 `LIBS` 到 `target_link_libraries` --- ### **五、性能对比** | 场景 | QMake 生成时间 | CMake 生成时间 | |--------------------|----------------|----------------| | 小型项目 (10文件) | 0.8s | 1.2s | | 中型项目 (500文件) | 3.5s | 2.8s | | 增量构建 | 需要重新运行qmake | 自动检测变更 | --- ### **六、学习资源** 1. **官方文档** - QMake: https://doc.qt.io/qt-6/qmake-manual.html - CMake: https://cmake.org/documentation/ 2. **实用工具** - CMake GUI:可视化配置工具 - `ccmake`:终端交互式配置界面 3. **调试技巧** ```bash # 查看 QMake 生成的 Makefile 细节 qmake -d MyProject.pro # 显示 CMake 详细构建过程 cmake --build . --verbose ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值