如果不存在,创建一个文件夹-错误在makefile



我在网上搜索了一个命令来创建一个文件夹,如果它不存在的话。我找到它并把它放入我的makefile

.DEFAULT_GOAL := all
folder := "myfolder"
createfolder:
[ ! -d ${folder} ] && mkdir -p ${folder}
nextstep:
echo "Got here!"
all: createfolder nextstep

当文件夹不存在时,它被正确创建。但是如果文件夹已经存在,我会得到一个错误。

$ ls
makefile
$ make
[ ! -d "myfolder" ] && mkdir -p "myfolder"
echo "Got here!"
Got here!
$ ls
makefile  myfolder
$ make
[ ! -d "myfolder" ] && mkdir -p "myfolder"
make: *** [makefile:5: createfolder] Error 1

我不明白为什么如果条件[ ! -d "myfolder" ]mkdir之前,命令会给出一个错误,它甚至不应该执行第二个命令。

我怎么解决它?

这就是make的作用

${folder}: 
mkdir -p ${folder}

我认为创建文件夹的最好方法是使用order-only先决条件:

%/.:
mkdir -p "$@"
有了它,您可以可靠地为任何规则创建目录:
nextstep: | $(folder)/.
...

如果启用二级展开,可以对任意编译规则使用相同的技巧:

$(OBJDIR)/%.o : $(SRCDIR)/%.c | $$(@D)/.
...

所以只要在规则的末尾加上| $$(@D)/.就可以了。

可以使用ifthenfi语法

.DEFAULT_GOAL := all
folder := "myfolder"
createfolder:
if [ ! -d ${folder} ]; then mkdir -p ${folder}; fi
nextstep:
echo "Got here!"
all: createfolder nextstep

相关内容

最新更新