dpkg-buildpackage 创建空包

dpkg-buildpackage creates empty package

我在 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-buildpackage。

问题

包裹是空的!

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

另外,应该在包中的内容似乎安装在我的本地机器上。

这是我在使用QMake构建时遇到的问题。

QMake 制作的通常 install 目标使用名为 INSTALL_ROOT 的变量,而不是 dpkg 期望的 DESTDIR

当我构建 Qt 二进制文件时,我添加到我的 QMake 参数中:

QMAKE_ARGS += INSTALL_ROOT=$(DESTDIR) DESTDIR=

如果我不取消 DESTDIR,它会出于某种原因尝试同时使用 INSTALL_ROOTDESTDIR

我也有一个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)