0

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

库应该安装在不同的架构中。为 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/ 文件夹,但它是空的,仅仅是因为 INSTALLS 运行它必须在构建时间之前而不是之后进行的安装。

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

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

4

2 回答 2

0

您无需在项目文件中编辑 DESTDIR。

只需使用:

target.path = $$LIB_INSTALL_DIR

INSTALLS += target
于 2013-10-16T13:38:51.000 回答
0

DESTDIR对安装目标有特殊含义:它用于在实际安装目标前加上替代根目录。DESTDIRDebian 中通常的构建系统通过设置为或类似来利用此功能/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)
于 2013-10-16T12:23:16.923 回答