Makefile 是否有一种优雅的方法来控制“创建目录”的权限;安装-D";?

Makefile 是否有一种优雅的方法来控制“创建目录”的权限;安装-D";?,makefile,Makefile,我正在Makefile中使用[/usr/bin/]install将一些二进制文件复制到我的$HOME目录中。我的umask设置为700 问题是我正在使用install-D-m 700安装二进制文件,并且父目录是以755而不是700的权限创建的: $ umask 077 $ ls $ touch hello $ ls -l total 0 -rw------- 1 emuso emuso 0 Apr 5 13:15 hello $ install -D -m 700 hello $PWD/thi

我正在Makefile中使用
[/usr/bin/]install
将一些二进制文件复制到我的
$HOME
目录中。我的umask设置为700

问题是我正在使用
install-D-m 700
安装二进制文件,并且父目录是以755而不是700的权限创建的:

$ umask
077
$ ls
$ touch hello
$ ls -l
total 0
-rw------- 1 emuso emuso 0 Apr  5 13:15 hello
$ install -D -m 700 hello $PWD/this/is/hello
$ ls -ld this
drwxr-xr-x 3 emuso emuso 4096 Apr  5 13:17 this
$ ls -lR this 
this:
total 4
drwxr-xr-x 2 emuso emuso 4096 Apr  5 13:17 is

this/is:
total 0
-rwx------ 1 emuso emuso 0 Apr  5 13:17 hello
我希望目录
this
get permissions 700而不是755

我想到的解决办法是:

  • 使用
    install-d-m700
    手动创建目录结构
  • 使用
    chmod
    手动修复权限
  • 第一种解决方案的主要缺点是我有一个目录结构,我必须手动移动和创建它


    因此,我的问题是:是否有一种优雅的方法来控制“install-D”创建的目录的权限?

    仅通过一次调用
    install
    似乎无法实现您想要实现的目标,因此您可能不得不求助于
    mkdir
    install
    的组合。根据您的具体情况,您可能能够利用a,使用以下方式:

    define einstall
    test -d "$(dir $@)" || mkdir -p "$(dir $@)"
    install -m 700 $< $@
    endef
    
    some/new/test/hello: hello
        $(einstall)
    
    define einstall
    测试-d“$(dir$@)”| | mkdir-p“$(dir$@)”
    安装-m 700$<$@
    恩德夫
    一些/新的/测试/你好:你好
    $(einstall)
    
    如果您计划在MakeV3.81或更高版本中使用罐装食谱,请务必阅读以下答案