我正在尝试编辑包含以下内容的 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
...
看完之后这个问答,我想到我可以用以下内容替换所有这些:
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'
这适用于install
coreutils 8.25 中的 GNU,但不适用于 coreutils 8.4。对于较旧的 coreutils 实现,请分两步进行:
install -d "$(DESTDIR)/usr/lib/myApp/scripts/network"
install -t "$(DESTDIR)/usr/lib/myApp/scripts/network" src/scripts/*
...或类似的东西。