Compiling
在 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
這裡使用標誌?我認為它應該將我的文件移動到指定的路徑並在需要時創建文件夾。
我相信你需要
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'
這適用於 coreutils 8.25 中的 GNU
install
,但不適用於 coreutils 8.4。對於較舊的 coreutils 實現,分兩步完成:install -d "$(DESTDIR)/usr/lib/myApp/scripts/network" install -t "$(DESTDIR)/usr/lib/myApp/scripts/network" src/scripts/*
…或類似的東西。