我正在尝试构建我的第一个库。
库应该安装在不同的体系结构中。为 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/