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

看完之后这个问答,我想到我可以用以下内容替换所有这些:

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 实现,请分两步进行:

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

...或类似的东西。

相关内容