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 № 1DESTDIR
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