测试一个目录是否存在于makefile中
在他的回答@Grundlefleck解释如何检查一个目录是否存在。 我尝试了一些在makefile
使用它,如下所示:
foo.bak: foo.bar
echo "foo"
if [ -d "~/Dropbox" ]; then
echo "Dir exists"
fi
运行make foo.bak
(因为foo.bar
存在)会产生以下错误:
echo "foo"
foo
if [ -d "~/Dropbox" ]; then
/bin/sh: -c: line 1: syntax error: unexpected end of file
make: *** [foo.bak] Error 2
我所做的解决方法是在独立的bash脚本中执行测试,并从makefile
调用脚本。 但是,这听起来很麻烦。 有没有更好的方法来检查目录是否存在于makefile
?
如果shell命令必须在一行中,或者在多行上使用反斜线进行行扩展,则使命令生效。 所以,这种方法将起作用:
foo.bak: foo.bar
echo "foo"
if [ -d "~/Dropbox" ]; then echo "Dir exists"; fi
要么
foo.bak: foo.bar
echo "foo"
if [ -d "~/Dropbox" ]; then
echo "Dir exists";
fi
这种方法具有最小的回声功能:
.PHONY: all
all:
ifneq ($(wildcard ~/Dropbox/.*),)
@echo "Found ~/Dropbox."
else
@echo "Did not find ~/Dropbox."
endif
在没有目录的情况下采取行动
如果您只需要知道某个目录是否不存在,并希望通过创建该目录来执行该操作,则可以使用普通的Makefile目标:
directory = ~/Dropbox
all: | $(directory)
@echo "Continuation regardless of existence of ~/Dropbox"
$(directory):
@echo "Folder $(directory) does not exist"
mkdir -p $@
.PHONY: all
备注:
|
表明make不应该关心时间戳(这是一个仅限订单的先决条件)。 mkdir -p $@
,您可以写入false
来退出,或以不同的方式解决您的问题。 如果您还需要在存在目录时运行特定的一系列指令,则不能使用上述内容。 换句话说,它相当于:
if [ ! -d "~/Dropbox" ]; then
echo "The ~/Dropbox folder does not exist"
fi
没有else
声明。
根据目录的存在采取行动
如果你想要相反的if语句,这也是可能的:
directory = $(wildcard ~/Dropbox)
all: | $(directory)
@echo "Continuation regardless of existence of ~/Dropbox"
$(directory):
@echo "Folder $(directory) exists"
.PHONY: all $(directory)
这相当于:
if [ -d "~/Dropbox" ]; then
echo "The ~/Dropbox folder does exist"
fi
再次,没有else
声明。
根据目录的存在和不存在进行处理
这会变得更加麻烦,但最终会为这两种情况提供很好的目标:
directory = ~/Dropbox
dir_target = $(directory)-$(wildcard $(directory))
dir_present = $(directory)-$(directory)
dir_absent = $(directory)-
all: | $(dir_target)
@echo "Continuation regardless of existence of ~/Dropbox"
$(dir_present):
@echo "Folder $(directory) exists"
$(dir_absent):
@echo "Folder $(directory) does not exist"
.PHONY: all
这相当于:
if [ -d "~/Dropbox" ]; then
echo "The ~/Dropbox folder does exist"
else
echo "The ~/Dropbox folder does not exist"
fi
自然,通配符扩展可能比if-else语句慢。 但是,第三种情况可能非常罕见,只是为了完整而添加。
链接地址: http://www.djcxy.com/p/17485.html