/ / Como criar o arquivo da biblioteca no pacote DEB e não no meu sistema, usando qmake? - linux, qt, compilação, debian, deb

Como construir o arquivo de biblioteca no pacote DEB e não no meu sistema, usando o qmake? - linux, qt, build, debian, deb

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

DESTDIR 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