Estou tentando construir minha primeira biblioteca.
Bibliotecas devem ser instaladas em diferentes arquiteturas. Uma biblioteca criada para o i386 geralmente fica em / usr / lib / i386-linux-gnu / mas, se criada para o amd64, vai para / usr / lib / amd64-linux-gnu /
Então, meu arquivo 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)
Consigo levar o LIB_INSTALL_DIR dentro do meu arquivo .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)
O problema é que o DESTDIR tenta enviar obiblioteca no meu próprio sistema de arquivos e não para construí-lo no pacote deb. Por exemplo, ele tenta enviá-lo por conta própria / usr / lib / i386-linux-gnu /, mas é incapaz, porque não tem permissão para fazê-lo.
Por outro lado,
target.files = *.so
target.path = $$LIB_INSTALL_DIR
INSTALLS+=target
falha também. Dentro de .Eu posso encontrar a pasta criada / usr / lib / i386-linux-gnu /, mas está vazia, simplesmente porque o INSTALLS executa as instalações que ele precisa fazer antes do tempo de compilação, não depois dele.
Finalmente, não consigo passar nenhuma variável dentro do debian / install, algo que seria muito conveniente.
Eu sei que isso também pode ser uma pergunta do Qt, mas acho que este é o lugar certo para perguntar, porque me sugerem usar outro método para lidar com isso.
Respostas:
0 para resposta № 1DESTDIR
tem um significado especial para destinos de instalação: é usado para prefixar os destinos de instalação reais com um diretório raiz alternativo. os sistemas de compilação usuais no Debian usam esse recurso configurando DESTDIR
para /path/where/the/package/is/built/debian/tmp
ou similar - então isso significa que um funcionamento adequado DESTDIR
é crucial para instalar os arquivos no pacote e não no seu sistema.
você pode dar uma olhada em como isso é tratado por outros pacotes que usam dh
, CMake
e instalar no /usr/lib/<arch>
.
uma pesquisa rápida revelou que o libssh2 é um pacote desse tipo e usa o seguinte em 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 para resposta № 2
Você não precisará editar DESTDIR dentro do arquivo do projeto.
Apenas use:
target.path = $$LIB_INSTALL_DIR
INSTALLS += target