RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1610803
Accepted
Zzero
Zzero
Asked:2025-04-25 00:49:26 +0000 UTC2025-04-25 00:49:26 +0000 UTC 2025-04-25 00:49:26 +0000 UTC

使用 CPack 创建 deb 包

  • 772

我再次撰写有关创建 .deb 包的文章。我用 C++、Cmake 编译器编写应用程序。有人告诉我要创建一个包我需要使用 Cpack。问题是,如何才能正确地做到这一点?该软件包需要用于多个系统(在本例中为 ubuntu 和 astra linux),我听说这也需要处理?但我不知道怎么做。以及如何更新它?如果您使用 Qt 小部件应用程序的示例来写答案,我会很高兴

linux
  • 1 1 个回答
  • 54 Views

1 个回答

  • Voted
  1. Best Answer
    user207200
    2025-04-25T15:34:05Z2025-04-25T15:34:05Z

    使用 构建包的CMakeLists.txt带有变量的简约示例。我不会提供文件的内容,因为这是通过标准方式生成新项目。可以编辑包文件的所有路径以适合您的分布和需求。这里,作为图标和快捷方式文件位置的示例,指示了与分发环境相关的路径。debcpackmain.cpp, mainwindow.cpp, mainwindow.hqt-creatorflyastra-linux

    cmake_minimum_required(VERSION 3.5)
    
    project(qtwdg-cpack-ex VERSION 0.1 LANGUAGES CXX)
    
    # build section
    
    set(CMAKE_INCLUDE_CURRENT_DIR ON)
    
    set(CMAKE_AUTOUIC ON)
    set(CMAKE_AUTOMOC ON)
    set(CMAKE_AUTORCC ON)
    
    set(CMAKE_CXX_STANDARD 11)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    
    find_package(Qt5 COMPONENTS Core Widgets REQUIRED)
    add_executable(qtwdg-cpack-ex main.cpp mainwindow.cpp)
    target_link_libraries(qtwdg-cpack-ex Qt5::Widgets Qt5::Core)
    
    # cpack section
    
    set(CPACK_GENERATOR "DEB")
    set(CPACK_PROJECT_NAME ${PROJECT_NAME})
    set(CPACK_DEBIAN_PACKAGE_SECTION "contrib")
    set(CPACK_DEBIAN_PACKAGE_MAINTAINER "MaintainerName <maintainer@mail>")
    set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "Example cpack deb-package build from qt-widgets project")
    set(CPACK_DEBIAN_PACKAGE_DEPENDS "libqt5core5a, libqt5widgets5")
    
    set(CPACK_PACKAGING_INSTALL_PREFIX "/")
    
    set(CPACK_STRIP_FILES ON)
    
    install(TARGETS qtwdg-cpack-ex DESTINATION "opt/usr/bin")
    
    # пример добавления иконки приложения
    install(FILES ${CMAKE_SOURCE_DIR}/icon.png DESTINATION "usr/share/pixmaps")
    
    # пример добавления ярлыка на рабочий стол (astra-linux)
    install(FILES ${CMAKE_SOURCE_DIR}/qtwdg-cpack-ex.desktop DESTINATION "usr/share/applications/flydesktop")
    
    # пример добавления ярлыка в панель запуска (пуск) (astra-linux)
    install(FILES ${CMAKE_SOURCE_DIR}/qtwdg-cpack-ex.desktop DESTINATION "usr/share/applications/flystartmenu")
    
    include(CPack)
    

    从项目目录构建:

    mkdir build && cd build && cmake .. && cpack
    

    结果:

    dpkg -I qtwdg-cpack-ex-0.1-Linux.deb
    
     new Debian package, version 2.0.
     size 8248 bytes: control archive=466 bytes.
         299 байт(а),    11 строк      control              
         306 байт(а),     4 строк      md5sums              
     Architecture: amd64
     Depends: libqt5core5a, libqt5widgets5
     Description: qtwdg-cpack-ex built using CMake
      Example cpack deb-package build from qt-widgets project
     Maintainer: MaintainerName <maintainer@mail>
     Package: qtwdg-cpack-ex
     Priority: optional
     Section: contrib
     Version: 0.1
     Installed-Size: 65
    
    dpkg --contents qtwdg-cpack-ex-0.1-Linux.deb
    
    drwxr-xr-x root/root         0 2025-04-25 10:10 ./opt/
    drwxr-xr-x root/root         0 2025-04-25 10:10 ./opt/usr/
    drwxr-xr-x root/root         0 2025-04-25 10:10 ./opt/usr/bin/
    -rwxr-xr-x root/root     26960 2025-04-25 10:10 ./opt/usr/bin/qtwdg-cpack-ex
    drwxr-xr-x root/root         0 2025-04-25 10:10 ./usr/
    drwxr-xr-x root/root         0 2025-04-25 10:10 ./usr/share/
    drwxr-xr-x root/root         0 2025-04-25 10:10 ./usr/share/applications/
    drwxr-xr-x root/root         0 2025-04-25 10:10 ./usr/share/applications/flydesktop/
    -rw-r--r-- root/root       157 2025-04-25 10:10 ./usr/share/applications/flydesktop/qtwdg-cpack-ex.desktop
    drwxr-xr-x root/root         0 2025-04-25 10:10 ./usr/share/applications/flystartmenu/
    -rw-r--r-- root/root       157 2025-04-25 10:10 ./usr/share/applications/flystartmenu/qtwdg-cpack-ex.desktop
    drwxr-xr-x root/root         0 2025-04-25 10:10 ./usr/share/pixmaps/
    -rw-r--r-- root/root      1718 2025-04-25 10:10 ./usr/share/pixmaps/icon.png
    

    安装该软件包后,系统中将创建两个用于启动窗口应用程序的具有指定图标的快捷方式:一个在桌面上,另一个在启动面板(开始)上。

    CPackPS由于该模块集成到了构建系统中,CMake它允许您相当简单、快速地为一系列包系统创建包。与组装 -package 的规范方式相比,您只需设置一些变量并指定几条规则,而deb无需创建一整套文件(control、等)并使用专门的实用程序和帮助程序。但这种方法也有一个缺点——创建出来的包远远不能满足官方的要求。您可以通过运行该实用程序来验证这一点。为了纠正一些错误和警告,有时您必须编写相当复杂的脚本。而不是结论:这种构建包的方法可以用于本地分发/使用,但可能难以发布到具有更严格规则的存储库。ruleschangelogdebianlintiancmake

    • 2

相关问题

  • 如果 fuser -k number/tcp 没有帮助,如何在 Debian 中释放端口?

  • Ubuntu。startx 不起作用。黑屏

  • --syn 在 iptables 中有什么作用?

  • 为什么需要iso格式?

  • C程序中没有密码的sudo

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5