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は、インストール ターゲットに対して特別な意味を持ちます。実際のインストール ターゲットに代替のルート ディレクトリをプレフィックスとして付けるために使用されます。Debian の通常のビルドシステムは、または同様の設定DESTDIRを行うことでこの機能を利用します。つまり、システムではなくパッケージにファイルをインストールするには、適切に機能することが重要です。/path/where/the/package/is/built/debian/tmpDESTDIR

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 に答える
0

プロジェクト ファイル内の DESTDIR を編集する必要はありません。

使用するだけです:

target.path = $$LIB_INSTALL_DIR

INSTALLS += target
于 2013-10-16T13:38:51.000 に答える