Makefileでinstall -Dを使用する

Makefileでinstall -Dを使用する

以下を含むMakefileを編集しようとしています。

...
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
...

読んだ後このQ&A、これらすべてを次に置き換えることができると思いました。

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

しかし、上記は私にエラーを与えます。

インストール:ターゲット「/var/lib/jenkins/data/workspace/network-service_build-test@2/build/debian/myApp-service-network/usr/lib/myApp/scripts/network」はディレクトリではありません。

-Dここでフラグの使用を誤解していますか?私はファイルを指定されたパスに移動し、必要に応じてフォルダを作成する必要があると思います。

ベストアンサー1

私はあなたが必要だと信じています

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

$(DESTDIR)/usr/lib/myApp/scripts/networkこれにより、中間ディレクトリを含むファイルが作成されコピーされますsrc/scripts/*

テスト(追加の詳細を開く):

$ 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'

これはinstallcoreutils 8.25のGNUでは機能しますが、coreutils 8.4では機能しません。以前のcoreutils実装の場合は、次の2つの手順に進みます。

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

...またはそのようなもの。

おすすめ記事