代码之家  ›  专栏  ›  技术社区  ›  Stewart

dpkg buildpackage创建空包

  •  1
  • Stewart  · 技术社区  · 6 年前

    我在debian包装的基础知识方面遇到了问题。我试图用一些特定的配置标志来打包我正在编译的qt。这样,我的同事就可以使用该软件包,而无需自己重新编译。这个问题与qt无关,它只是我正在构建的项目。

    如何创建包:

    获取软件包:

    运行这些命令。或者,将tarball内容提取到此文件夹以利用预生成的文件

    wget http://download.qt.io/official_releases/qt/5.10/5.10.0/single/qt-everywhere-src-5.10.0.tar.xz
    tar -xf qt-everywhere-src-5.10.0.tar.xz
    cd qt-everywhere-src-5.10.0
    

    生成debian构建系统说明:

    DEBFULLNAME="My name"
    dh_make --email email@company.com                   \
             --file=../qt-everywhere-src-5.10.0.tar.xz  \
             -s                                         \
             --packagename=sim-qt                       \
             --copyright=lgpl
    

    配置debian构建系统说明:

    编辑debian/control的这些字段:

    Section: devel
    Homepage: http://download.qt.io/official_releases/qt/5.10/5.10.0/single/
    Description: My Qt build
    

    编辑debian/rules,如下所示:

    #!/usr/bin/make -f
    
    %:
            dh $@  --with autotools-dev --parallel
    
    override_dh_auto_configure:
            ./configure --prefix=/opt/sim-qt           \
                        --opensource --confirm-license \
                        --skip=qtcharts                \
                        --skip=qtvirtualkeyboard       \
                        --skip=qtdatavis3d             \
                        --skip=qtwebengine             \
                        --silent                       \
                        --nomake=examples              \
                        --nomake=tests
    

    构建包:

    sudo dpkg-buildpackage -rfakeroot -nc
    

    我正在使用 -nc 因为编译需要一个多小时。如果不需要的话,我不想重新编译,在过去几天里我一直在使用dpkg构建包。

    问题所在

    包裹是空的!

    stew@stewbian:~/src/qt$ dpkg --contents sim-qt_5.10.0-1_amd64.deb
    drwxr-xr-x root/root         0 2018-03-14 10:36 ./
    drwxr-xr-x root/root         0 2018-03-14 10:36 ./usr/
    drwxr-xr-x root/root         0 2018-03-14 10:36 ./usr/share/
    drwxr-xr-x root/root         0 2018-03-14 10:36 ./usr/share/doc/
    drwxr-xr-x root/root         0 2018-03-14 10:36 ./usr/share/doc/sim-qt/
    -rw-r--r-- root/root       188 2018-03-14 10:36 ./usr/share/doc/sim-qt/README.Debian
    -rw-r--r-- root/root       188 2018-03-14 10:36 ./usr/share/doc/sim-qt/changelog.Debian.gz
    -rw-r--r-- root/root      1440 2018-03-14 10:36 ./usr/share/doc/sim-qt/copyright
    

    还有 应该 在包中似乎安装在我的本地计算机上。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Toby Speight    6 年前

    这是我在使用QMake构建时看到的一个问题。

    和往常一样 install QMake创建的目标使用一个名为 INSTALL_ROOT 而不是 DESTDIR 那个 dpkg 期望值。

    构建Qt二进制文件时,我会将以下参数添加到QMake参数中:

    QMAKE_ARGS += INSTALL_ROOT=$(DESTDIR) DESTDIR=
    

    如果我不清空 DESTDIR公司 ,它尝试同时使用 安装\u根目录 DESTDIR公司 出于某种原因。

    我还有一个 PREFIX 释义我不知道您是否需要:

    QMAKE_ARGS +=  PREFIX=/usr
    

    最后,值得告诉Qt不要剥离二进制文件( dh_strip 将这样做,如果您想让符号包与二进制文件一起使用,您也希望这样做):

    QMAKE_ARGS += QMAKE_STRIP=:
    

    然后,在运行QMake时使用这些参数:

    $(PROJECT)/Makefile: $(PROJECT)/my_project.pro
        @test -d $(@D) || mkdir -p $(@D) || test -d $(@D)
        $(QMAKE) -o $@ $< $(QMAKE_ARGS)