# QtMiriSDR **Repository Path**: matace/qtMiriSdr ## Basic Information - **Project Name**: QtMiriSDR - **Description**: No description available - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-16 - **Last Updated**: 2026-01-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CMake + Qt5 跨平台项目模板 基于 CMake 和 Qt5 的跨平台应用程序项目模板,支持 Windows、Linux 和 macOS。 ## 📋 项目简介 本项目展示了如何使用 CMake 构建一个完整的 Qt5 应用程序,包括: - ✅ 跨平台支持 (Windows, Linux, macOS) - ✅ 模块化的项目结构 - ✅ 本地库的创建和集成 - ✅ Qt UI 界面和资源文件管理 - ✅ 完整的安装和打包配置 - ✅ 详细的中文注释 ## 🏗️ 项目结构 ``` cmake_qt5/ ├── CMakeLists.txt # 主 CMake 配置文件 ├── README.md # 项目说明文档 ├── LICENSE # 开源许可证 │ ├── cmake/ # CMake 相关配置 │ ├── cmake_uninstall.cmake.in # 卸载脚本模板 │ └── modules/ # 自定义 CMake 模块 │ ├── BuildDoxygen.cmake # Doxygen 文档生成配置 │ ├── FindLibusb.cmake # libusb 查找模块 │ └── FindLibxxx.cmake # 自定义库查找模块示例 │ ├── docs/ # 文档目录 │ └── Doxyfile.in # Doxygen 配置模板 │ ├── libs/ # 本地库目录 │ ├── CMakeLists.txt # 库管理配置 │ └── devlibs/ # 本地开发库 │ ├── CMakeLists.txt │ └── MathFunctions/ # 数学函数库示例 │ ├── CMakeLists.txt # 库配置文件 │ ├── Config.cmake.in # 库配置模板 │ ├── include/ # 库头文件 │ │ ├── MathFunctions.h │ │ └── mysqrt.h │ └── src/ # 库源文件 │ ├── MathFunctions.cpp │ └── mysqrt.cpp │ ├── resources/ # 资源文件目录 │ ├── icon.qrc # Qt 资源文件 │ └── images/ # 图片资源 │ └── src/ # 源代码目录 ├── CMakeLists.txt # 源代码配置文件 ├── logo.rc # Windows 应用图标 │ ├── app/ # 应用程序入口 │ ├── CMakeLists.txt │ └── src/ │ └── main.cpp # 程序入口 │ └── qtgui/ # Qt GUI 模块 ├── CMakeLists.txt ├── include/ # GUI 头文件 │ └── qtcmakewindow.h ├── src/ # GUI 源文件 │ └── qtcmakewindow.cpp └── ui/ # Qt Designer 界面文件 └── qtcmakewindow.ui ``` ## 🔧 环境要求 ### 必需依赖 - **CMake**: >= 3.10 - **Qt5**: >= 5.9 (需要以下模块) - Qt5::Core - Qt5::Gui - Qt5::Widgets - Qt5::SerialPort - Qt5::PrintSupport - **C++ 编译器**: 支持 C++11 标准 - Windows: MSVC 2015+, MinGW - Linux: GCC 5+, Clang 3.8+ - macOS: Xcode 8+, Clang ### 可选依赖 - **Doxygen**: 用于生成文档 - **Git**: 用于版本控制 ## 🚀 快速开始 ### 1. 克隆或下载项目 ```bash git clone cd cmake_qt5 ``` ### 2. 配置 Qt5 路径 (可选) 如果 Qt5 未安装在系统默认路径,需要在配置时指定路径: **Windows:** ```powershell # 方式 1: 设置环境变量 $env:Qt5_DIR = "D:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5" # 方式 2: 在 CMake 配置时指定 cmake -B build -S . -DQt5_DIR="D:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5" ``` **Linux/macOS:** ```bash # 方式 1: 设置环境变量 export Qt5_DIR="/usr/lib/cmake/Qt5" # 方式 2: 在 CMake 配置时指定 cmake -B build -S . -DQt5_DIR="/usr/lib/cmake/Qt5" ``` ### 3. 配置和编译 **Windows (PowerShell):** ```powershell # 配置项目 (Debug 模式) cmake -B build -S . -DCMAKE_BUILD_TYPE=Debug # 配置项目 (Release 模式) cmake -B build -S . -DCMAKE_BUILD_TYPE=Release # 编译项目 cmake --build build --config Release # 或使用 MSBuild cmake --build build --config Release -- /m ``` **Linux/macOS:** ```bash # 配置项目 (Debug 模式) cmake -B build -S . -DCMAKE_BUILD_TYPE=Debug # 配置项目 (Release 模式) cmake -B build -S . -DCMAKE_BUILD_TYPE=Release # 编译项目 (多线程) cmake --build build -j$(nproc) ``` ### 4. 运行程序 **Windows:** ```powershell .\build\src\Release\usb_mouse.exe ``` **Linux/macOS:** ```bash ./build/src/usb_mouse ``` ## 📦 安装和打包 ### 安装到本地目录 ```bash # 安装到 install/ 目录 cmake --install build --prefix install # 在 Windows 上,安装后会自动运行 windeployqt 复制 Qt DLL ``` 安装后的目录结构: ``` install/ ├── bin/ # 用户可执行文件 │ └── usb_mouse.exe ├── include/ # 头文件 │ └── *.h ├── lib/ # 库文件和配置 │ ├── MathFunc.cmake │ ├── MathFuncConfig.cmake │ └── ... └── sys/ # 系统依赖文件 ├── bin/ # 运行时库 └── lib/ # 静态库 ``` ### 生成安装包 ```bash # 生成安装包 cmake --build build --target package # 生成的安装包位于 build/ 目录: # Windows: usb_mouse-1.0.0-win64.exe (NSIS), usb_mouse-1.0.0-win64.zip # Linux: usb_mouse-1.0.0-Linux.deb, usb_mouse-1.0.0-Linux.rpm, usb_mouse-1.0.0-Linux.tar.gz # macOS: usb_mouse-1.0.0-Darwin.dmg, usb_mouse-1.0.0-Darwin.tar.gz ``` ## 🛠️ 高级配置 ### 编译选项 在配置时可以通过 `-D` 选项设置: ```bash # 构建类型 (Debug, Release, MinSizeRel, RelWithDebInfo) cmake -B build -S . -DCMAKE_BUILD_TYPE=Release # 编译为动态库 (默认为静态库) cmake -B build -S . -DBUILD_SHARED_LIBS=ON # 禁用 MathFunctions 库 cmake -B build -S . -DUSE_LIB_MATHFUNCTIONS=OFF # 指定安装前缀 cmake -B build -S . -DCMAKE_INSTALL_PREFIX=/usr/local # 指定 C++ 标准 cmake -B build -S . -DCMAKE_CXX_STANDARD=17 ``` ### 编译命令 ```bash # 生成编译命令数据库 (用于 clangd, VSCode 等) # compile_commands.json 自动生成在 build/ 目录 # 详细编译输出 cmake --build build --verbose # 清理构建 cmake --build build --target clean ``` ### 其他目标 ```bash # 生成文档 (需要 Doxygen) cmake --build build --target docs # 卸载已安装的文件 cmake --build build --target uninstall ``` ## 📚 项目特性详解 ### 1. 模块化结构 项目采用模块化设计,每个模块有独立的 `CMakeLists.txt`: - `app/`: 应用程序入口 (main.cpp) - `qtgui/`: Qt GUI 界面模块 - `libs/devlibs/`: 本地开发的库 ### 2. 全局属性管理 使用自定义的 `add_file()` 函数收集各模块的文件: ```cmake # 在子目录中收集文件 add_file(QT_SRC_FILES ${SRC_FILES}) add_file(QT_HEAD_PATH "${CMAKE_CURRENT_LIST_DIR}/include") # 在父目录中获取 get_property(ALL_SOURCES GLOBAL PROPERTY QT_SRC_FILES) ``` ### 3. Qt 自动化工具 - `CMAKE_AUTOMOC`: 自动处理 MOC (Meta-Object Compiler) - `CMAKE_AUTORCC`: 自动处理 .qrc 资源文件 - 手动 `qt5_wrap_ui()`: 处理 .ui 界面文件 ### 4. 跨平台兼容性 - 根据平台自动选择编译器选项 - 平台特定的资源文件 (Windows .rc 文件) - 自动检测和配置 Qt 依赖库 ### 5. 库的创建和使用 `MathFunctions` 库示例展示了: - 如何创建库目标 - 如何设置头文件包含路径 - 如何生成 `find_package` 配置文件 - 如何安装库和头文件 ## 🔍 常见问题 ### Q: 找不到 Qt5 **A:** 确保已正确安装 Qt5,并设置 `Qt5_DIR` 环境变量或在配置时指定路径。 ### Q: 编译错误: "undefined reference to vtable" **A:** 这通常是 MOC 文件未正确生成。确保: 1. 头文件中使用了 `Q_OBJECT` 宏 2. `CMAKE_AUTOMOC` 已设置为 `ON` 3. 清理构建目录后重新编译 ### Q: Windows 下运行提示缺少 DLL **A:** 两种解决方案: 1. 使用 `windeployqt` 复制 Qt DLL 到可执行文件目录 2. 将 Qt 的 `bin` 目录添加到 PATH 环境变量 ### Q: 如何添加新的源文件? **A:** 1. 将文件添加到相应目录 (如 `src/qtgui/src/`) 2. 重新运行 `cmake -B build` (GLOB 会自动查找) 3. 推荐方式: 在 CMakeLists.txt 中显式列出文件 ## 📖 学习资源 - [CMake 官方文档](https://cmake.org/documentation/) - [Qt5 官方文档](https://doc.qt.io/qt-5/) - [Modern CMake 实践](https://cliutils.gitlab.io/modern-cmake/) ## 🤝 贡献 欢迎提交 Issue 和 Pull Request! ## 📄 许可证 见 [LICENSE](LICENSE) 文件。 ## 👤 作者 Your Name ## 🙏 致谢 感谢所有开源项目的贡献者。