Makefile PHONY目标使用测试命令

时间:2016-05-10 11:28:58

标签: bash testing makefile target

Makefile的以下简单PHONY目标失败:

dir=/etc
file=fstab
install:
        -test ! -f $(dir)/$(file)

显示错误:

make install
-I/root/module
test ! -f /etc/fstab
make: [install] Error 1 (ignored)

如果我从条件中删除!符号,则没有问题。 有人可以帮我解决这个问题吗?我希望这是bash / Makefile目标中的一个错误。

1 个答案:

答案 0 :(得分:0)

你的食谱:

-test ! -f $(dir)/$(file)
如果$(dir)/$(file)不存在,

将成功(返回0) 如果$(dir)/$(file)存在,则失败(返回非零)。因为- 前缀,make会忽略失败,默认会报告它忽略失败,并且会继续 而不是停止。

查找

<强>生成文件

dir=/etc
file=fstab

.PHONY: all install

all: install
    echo "Success"

install:
    -test ! -f $(dir)/$(file)

运行它:

$ make
test ! -f /etc/fstab
Makefile:8: recipe for target 'install' failed
make: [install] Error 1 (ignored)
echo "Success"
Success

bash没有被打破。 make没有被打破。没有错。

如果您甚至不希望看到make的progess和诊断输出 你可以让他们沉默:

$ make --silent
Success