我有一个简单的 Makefile,它依赖于特定的文件夹结构。我想添加一个测试,以便 Makefile 失败并显示一条消息,告诉用户文件夹丢失。
我的目标是这样的:
check_folders:
test -d ../some_folder || $(error The ../some_folder folder does not exist)
.PHONY: check_folders
Run Code Online (Sandbox Code Playgroud)
我期望这里有一个短路逻辑,因此如果第一个语句通过(并且文件夹存在),则不会执行第二个语句。但它不起作用,即使文件夹存在也会引发错误:
$ mkdir ../some_folder
$ make check_folders
makefile:24: *** The ../some_folder folder does not exist. Stop.
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!
谢谢!
您正在使用 make 功能来引发错误,而不是 shell 功能。在调用配方之前,首先扩展配方中的所有 make 变量和函数。
你有两个选择。第一个是完全切换到配方失败:如果配方因失败而退出,则 make 将停止。所以你可以这样写你的规则:
check_folders:
test -d ../some_folder || { echo The ../some_folder folder does not exist; exit 1; }
Run Code Online (Sandbox Code Playgroud)
另一种是完全切换来做测试;这将在调用任何配方之前发生,因为解析 makefile:
$(if $(wildcard ../some_folder/.),,$(error The ../some_folder folder does not exist))
Run Code Online (Sandbox Code Playgroud)