linux - 如何使用 qmake 将库文件构建到 DEB 包中而不是构建到我的系统中?

标签 linux qt build debian deb

我正在尝试构建我的第一个库。

库应该安装在不同的体系结构中。为 i386 构建的库通常位于/usr/lib/i386-linux-gnu/但如果为 amd64 构建,则位于/usr/lib/amd64-linux-gnu/

所以,我的 debian/rules 文件

#!/usr/bin/make -f

export DH_VERBOSE=1

%:
    dh $@

override_dh_auto_configure:
    dh_auto_configure -- LIB_INSTALL_DIR=/usr/lib/$(DEB_HOST_MULTIARCH)

我可以在我的 .pro 文件中获取 LIB_INSTALL_DIR:

isEmpty(LIB_INSTALL_DIR){
    message("LIB_INSTALL_DIR is empty. It shouldn't be if this isn't an example build.")
    DESTDIR = .
} else {
    DESTDIR = $$LIB_INSTALL_DIR
}

message(Library will be placed at $$DESTDIR)

问题是 DESTDIR 尝试将库发送到我自己的文件系统中,而不是将其构建到 deb 包中。例如,它尝试将其发送到我自己的/usr/lib/i386-linux-gnu/上,但它无法发送,因为它没有这样做的权限。

另一方面,

target.files = *.so
target.path = $$LIB_INSTALL_DIR
INSTALLS+=target

也失败了。在 .deb 包中,我可以找到创建的/usr/lib/i386-linux-gnu/文件夹,但它是空的,只是因为安装运行它必须在构建时间之前而不是之后执行的安装。

最后,我无法在 debian/install 中传递任何变量,这会非常方便。

我知道这也可能是一个 Qt 问题,但我认为这是提问的正确位置,因为可能会建议我使用其他方法来处理这个问题。

最佳答案

DESTDIR对于安装目标有特殊含义:它用于为实际安装目标添加替代根目录的前缀。 Debian 中常用的构建系统通过设置 DESTDIR 来利用此功能。至/path/where/the/package/is/built/debian/tmp或类似 - 所以这意味着正常工作 DESTDIR将文件安装到软件包中而不是安装到系统中至关重要。

您可能想看看其他使用 dh 的包是如何处理这个问题的, CMake并安装到 /usr/lib/<arch> .

快速搜索发现libssh2就是这样一个包,它在 debian/rules 中使用了以下内容: :

DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
CONFIGURE_EXTRA_FLAGS += --libdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH)

%:
        dh $@ --with autoreconf

override_dh_auto_configure:
        dh_auto_configure -- $(CONFIGURE_EXTRA_FLAGS)

关于linux - 如何使用 qmake 将库文件构建到 DEB 包中而不是构建到我的系统中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19402365/

相关文章:

linux - 在 Unity,Ubuntu 13.04 中捕获关机事件的方法

node.js - Solaris 上是否有任何预构建的 Node.JS 二进制文件?

linux - 即使 vm.overcommit_memory=1 ,numpy 也不会过度使用内存

c++ - QTimer 不发出超时信号

c++ - fork 、管道和文件操作

c++ - QItemDelegate,如何在 closeEditor() 信号中提供我自己的 EndEditHint?

database - 如何从现有数据库数据生成 Symfony 固定装置 YAML?

spring - Spring Framework 4 的 Maven 3 构建问题 - NoSuchMethodError

linux - 在哪里可以找到 UDP 的 Linux 实现的源代码?

java - tomcat8 和 eclipse 火星噩梦