我在网上搜索了一个命令来创建一个文件夹,如果它不存在的话。我找到它并把它放入我的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)/.
就可以了。
可以使用if
then
fi
语法
.DEFAULT_GOAL := all
folder := "myfolder"
createfolder:
if [ ! -d ${folder} ]; then mkdir -p ${folder}; fi
nextstep:
echo "Got here!"
all: createfolder nextstep