我想添加几行,以便如果某个目录(由 Makefile 变量 DIR1 设置)不存在,则 make 过程可能会出错。这是添加的部分,但即使我 DIR1 设置的目录存在,也会出错。例如,我创建了名为“dir1”的目录,但出现错误。怎么了?
DIR1 = dir1
.PHONY : check_dir
$(info DIR1 = $(DIR1))
check_dir:
if [ ! -d $(DIR1) ]; then \
$(error "DIR1 does not exist! check Makefile!"); \
fi
Run Code Online (Sandbox Code Playgroud)
这是运行结果。(我dir1在当前目录中有一个名为的目录)。
> ckim@chan-ubuntu:~/testmake/test1$ make
> DIR1 = dir1 Makefile:8:
> *** "DIR1 does not exist! check Makefile!". Stop.
Run Code Online (Sandbox Code Playgroud)
$(error ...)在将配方传递到 shell 之前,会通过 make 系统地扩展。因此,每次运行此配方时都会引发错误,与 shellif语句的结果无关。
仅使用 shell 结构:
check_dir:
if [ ! -d "$(DIR1)" ]; then \
echo "$(DIR1) does not exist! check Makefile!"; \
exit 1; \
fi
Run Code Online (Sandbox Code Playgroud)
或者(更紧凑一点,如果不是更容易理解的话):
MESSAGE := $(DIR1) does not exist! check Makefile!
check_dir:
@[ -d "$(DIR1)" ] || { echo "$(MESSAGE)"; exit 1; }
Run Code Online (Sandbox Code Playgroud)
还有其他可能性,例如:
check_dir: $(DIR1)
$(DIR1):
$(error $(DIR1) does not exist! check Makefile!)
Run Code Online (Sandbox Code Playgroud)
但这并不影响命名的文件$(DIR1)和目录。
注意:如果您想在 make 解析 Makefile 并发现目录不存在时引发错误,您可以使用该shell函数和 make 条件:
OK := $(shell if [ -d $(DIR1) ]; then echo "ok"; fi)
ifeq ($(OK),)
$(error $(DIR1) does not exist! check Makefile!)
endif
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4333 次 |
| 最近记录: |