A diferença
O destino binary-indep
cria todos os pacotes binários Architecture: all
em seu pacote de código-fonte. O destino binary-arch
cria todos os outros pacotes, Architecture: any
ou pacotes com uma lista de arquitetura explícita ou alguns curingas de arquitetura como Architecture: linux-any
.
Por quê?
A distinção destes dois caminhos dentro do processo de construção é relevante se você tiver um pacote fonte que contenha ambos os tipos de pacotes binários, dependentes de arquitetura e independentes: A compilação inicial do pacote constrói ambos os tipos de pacotes binários, mas cada construção subseqüente em arquiteturas diferentes precisa apenas construir os pacotes binários dependentes de arquitetura, já que você já construiu todos os pacotes independentes de arquitetura na primeira construção.
Exemplo
Imagine que você tenha um pacote fonte chamado foo
, que cria os pacotes binários foo-programs
e foo-data
. Enquanto os programas em foo-programs
precisam ser compilados (por exemplo, por serem escritos em C) e portanto o pacote binário é de Architecture: any
, os arquivos de dados em foo-data
(imagens, traduções, textos de ajuda, documentação, texturas, mapas de jogos, etc.) são os mesmos para todas as arquiteturas, por isso é Architecture: all
. Digamos que a versão upstream do foo seja 1.0 e seja a primeira revisão do pacote Debian dessa versão upstream.
Você primeiro compila todos os pacotes na arquitetura amd64
para PCs de 64 bits, e você obterá foo-programs_1.0-1_amd64.deb
e foo-data_1.0-1_all.deb
. Mas você também quer poder executá-lo em PCs de 32 bits, portanto você também precisa de foo-programs_1.0-1_i386.deb
. Mas você não precisa de um segundo foo-data_1.0-1_all.deb
, portanto, seu processo de criação exige apenas as metas *-arch
, por exemplo, chamando dpkg-buildpackage -B
.
Necessidade de alvos explícitos
Com o mínimo dh
style debian/rules
pode não ser necessário especificar explicitamente os destinos, pois muitos sistemas de criação upstream não fazem essa distinção, mas se o fizerem (por exemplo, ter um destino make
separado para a construção a documentação, você pode implementar isso, por exemplo, assim:
#!/usr/bin/make -f
%:
dh $@
override_dh_auto_build-indep:
$(MAKE) -C docs
(Exemplo retirado da página dh(7)
man.)