Ubuntu下Qt项目能否用普通Makefile/CMake?如何制作.deb安装包?
当然可以!针对你的两个核心问题,我来给你详细解答:
一、Qt项目可以用CMake或手写Makefile替代Qmake
1. 推荐用CMake(官方支持,更灵活)
Qt从5.x开始就官方支持CMake,到Qt6更是把CMake作为推荐构建工具,完全可以替代Qmake。你可以把现有的Calculator.pro转换成CMakeLists.txt,结合你的.pro内容,示例如下:
cmake_minimum_required(VERSION 3.16) # 项目名称和版本 project(Calculator VERSION 1.0.0 LANGUAGES CXX) # 设置C++标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 查找Qt组件(对应你.pro里的QT += core gui widgets) find_package(Qt6 REQUIRED COMPONENTS Core Widgets) # 如果是Qt5,把Qt6改成Qt5即可 # find_package(Qt5 REQUIRED COMPONENTS Core Widgets) # 自动处理moc、uic、rcc(Qt的元对象、UI编译、资源文件工具) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) # 源文件列表(对应你.pro里的SOURCES) set(SOURCES main.cpp mainwindow.cpp error.cpp # 把你剩下的源文件都加在这里 ) # 如果有UI文件,也要加进来 # set(UI_FILES # mainwindow.ui # ) # 添加可执行文件 add_executable(Calculator ${SOURCES}) # 链接Qt库 target_link_libraries(Calculator PRIVATE Qt6::Core Qt6::Widgets) # Qt5的话是:target_link_libraries(Calculator PRIVATE Qt5::Core Qt5::Widgets) # 设置安装路径(可选,后面打包会用到) install(TARGETS Calculator DESTINATION bin)
使用的时候,只需要在项目目录下执行:
mkdir build && cd build cmake .. make
2. 手写普通Makefile(可行但不推荐)
理论上可以手写Makefile,但Qt项目需要处理**moc(元对象编译)、uic(UI文件编译)、rcc(资源文件编译)**这些额外步骤,手写会非常繁琐,容易出错。比如你需要手动调用moc生成moc_*.cpp文件,再把这些文件加入编译列表,还要处理头文件依赖。除非你的项目极其简单,否则不建议这么做。
二、在Ubuntu上生成.deb安装包
针对Ubuntu系统,有几种靠谱的方式生成.deb包,结合CMake的话会更顺畅:
1. 用CMake+CPack(最简单,推荐)
CPack是CMake自带的打包工具,支持直接生成deb包。只需要在上面的CMakeLists.txt末尾添加以下配置:
# CPack配置 set(CPACK_PACKAGE_NAME "Calculator") set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A simple calculator application built with Qt") set(CPACK_PACKAGE_CONTACT "your-email@example.com") set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Your Name") set(CPACK_DEBIAN_PACKAGE_DEPENDS "qt6-base-core, qt6-base-widgets") # 替换成你实际依赖的Qt版本包,Qt5的话是qtbase5-core, qtbase5-widgets set(CPACK_GENERATOR "DEB") include(CPack)
然后在build目录下执行:
make install cpack -G DEB
执行完后,build目录下就会生成类似Calculator-1.0.0-Linux.deb的安装包,用户可以直接用dpkg -i安装。
2. 传统Debian打包方式(更定制化)
如果你需要更精细地控制包的内容、依赖、安装脚本等,可以用Debian官方的打包流程:
- 在项目根目录创建
debian文件夹 - 里面创建
control、rules、copyright等文件(具体格式可参考Debian打包规范) - 然后执行
debuild -us -uc生成deb包。这种方式适合需要发布到官方软件源的场景,但学习成本稍高。
3. 用fpm工具(快速生成)
如果不想折腾CMake或Debian打包规则,可以用fpm工具快速从二进制文件生成deb包:
- 先安装fpm:
sudo apt install ruby ruby-dev && sudo gem install fpm - 编译你的Qt项目,得到
Calculator二进制文件 - 执行命令:
fpm -s dir -t deb -n calculator -v 1.0.0 -d "qt6-base-core, qt6-base-widgets" ./Calculator=/usr/bin/
这样就能直接生成deb包,适合快速测试。
内容的提问来源于stack exchange,提问作者Dennis Vymer
相关产品推荐
相关产品推荐

