Usando install -D no Makefile

0

Estou tentando editar um Makefile que contenha:

...
install -d $(DESTDIR)/usr/lib/myApp
install -d $(DESTDIR)/usr/lib/myApp/scripts
install -t $(DESTDIR)/usr/lib/myApp/scripts \
    src/scripts/ap.sh \
    src/scripts/connect.sh \
    src/scripts/devices.sh \
    src/scripts/create_ap \
    src/scripts/scan.sh
...

Depois de ler este Q / A , recebi a ideia de que eu poderia substituir tudo isso com:

install -D src/scripts/* $(DESTDIR)/usr/lib/myApp/scripts

Mas o texto acima me dá um erro dizendo:

install: target '/var/lib/jenkins/data/workspace/network-service_build-test@2/build/debian/myApp-service-network/usr/lib/myApp/scripts/network' is not a directory

Estou entendendo mal o uso da bandeira -D aqui? Eu estou pensando que deve mover meus arquivos para o caminho especificado e criar as pastas, se necessário.

    
por Philip Kirkbride 02.11.2017 / 21:32

1 resposta

3

Eu acredito que você precisa

install -t "$(DESTDIR)/usr/lib/myApp/scripts/network" -D src/scripts/*

Isto irá criar $(DESTDIR)/usr/lib/myApp/scripts/network (incluindo diretórios intermediários) e copiar os arquivos src/scripts/* lá.

Teste (com verbosidade extra ativada):

$ touch file-{1,2,3,4}
$ install -v -t test/dir -D file-[1-4]
install: creating directory 'test'
install: creating directory 'test/dir'
'file-1' -> 'test/dir/file-1'
'file-2' -> 'test/dir/file-2'
'file-3' -> 'test/dir/file-3'
'file-4' -> 'test/dir/file-4'

Isso funciona com o GNU install do coreutils 8.25, mas falha com o coreutils 8.4. Para implementações mais antigas do coreutils, faça isso em duas etapas:

install -d "$(DESTDIR)/usr/lib/myApp/scripts/network"
install -t "$(DESTDIR)/usr/lib/myApp/scripts/network" src/scripts/*

... ou algo semelhante.

    
por 02.11.2017 / 21:39