/ / Jak zbudować plik biblioteki do pakietu DEB, a nie do mojego systemu, używając qmake? - linux, qt, build, debian, deb

Jak zbudować plik biblioteki do pakietu DEB, a nie do mojego systemu, używając qmake? - linux, qt, build, debian, deb

Próbuję zbudować moją pierwszą bibliotekę.

Biblioteki powinny być instalowane w różnych architekturach. Biblioteka zbudowana dla i386 zwykle znajduje się w / usr / lib / i386-linux-gnu /, ale jeśli jest zbudowana dla amd64, trafia do / usr / lib / amd64-linux-gnu /

Więc mój plik 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)

Jestem w stanie pobrać LIB_INSTALL_DIR wewnątrz mojego pliku .pro:

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)

Chodzi o to, że DESTDIR próbuje wysłaćbiblioteki w moim własnym systemie plików, a nie do wbudowania jej w pakiet deb. Na przykład, próbuje wysłać go na mój własny / usr / lib / i386-linux-gnu /, ale nie jest w stanie, ponieważ nie ma uprawnień do tego.

Z drugiej strony,

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

również się nie udaje. W środku .Pakiet deb Mogę znaleźć utworzony folder / usr / lib / i386-linux-gnu /, ale jest pusty, ponieważ INSTALLS uruchamia instalacje, które musi wykonać przed budowaniem, a nie po nim.

Wreszcie, nie mogę przekazać żadnej zmiennej wewnątrz debian / install, co byłoby bardzo wygodne.

Wiem, że to może być również pytanie Qt, ale myślę, że to właściwe miejsce, aby go o to poprosić, ponieważ mogę zasugerować, aby użyć innej metody do tego celu.

Odpowiedzi:

0 dla odpowiedzi № 1

DESTDIR ma specjalne znaczenie dla celów instalacji: służy do poprzedzania rzeczywistych celów instalacji alternatywnym katalogiem głównym. zwykłe systemy budowania w Debianie korzystają z tej funkcji, ustawiając DESTDIR do /path/where/the/package/is/built/debian/tmp lub podobne - oznacza to, że prawidłowo działa DESTDIR jest istotny aby zainstalować pliki w pakiecie, a nie w systemie.

możesz zechcieć przyjrzeć się, w jaki sposób obsługuje to inne pakiety dh, CMake i zainstaluj w /usr/lib/<arch>.

szybkie wyszukiwanie ujawniło, że libssh2 jest takim pakietem i używa następujących elementów 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)

0 dla odpowiedzi nr 2

Nie będziesz musiał edytować DESTDIR w pliku projektu.

Po prostu użyj:

target.path = $$LIB_INSTALL_DIR

INSTALLS += target