存在文件的条件函数测试

时间:2018-01-05 03:08:02

标签: makefile gnu-make

我想检查规则中文件的大小,但仅限于文件存在的情况。 check_size是一个自定义函数。在下面,make甚至不会调用check_size:

    $(if $(test -f $(file)),\
        @$(call check_size,$(shell stat -f%z $(file),$(size)))

我不知道出了什么问题。任何帮助将不胜感激。

谢谢, -Vj

1 个答案:

答案 0 :(得分:1)

没有make函数test,因此$(test -f $(file))会导致make尝试扩展名为test -f $(file)的make变量,这显然不存在,因此它扩展为空字符串。

因此,if-condition始终为false(在make if函数和其他条件中,空字符串为false且非空字符串为true)且then子句未展开。

在食谱中使用像这样的make函数并让它们做你想做的事情实际上有点棘手,而且我也无法弄清楚call在这里做了什么:为什么你是否将$(file),$(size)传递给shell中的stat程序?但由于没有关于check_size的信息,我们必须认为这是必要的。

在这种情况下,你必须使用真正的制作功能;您要用来测试文件是否存在的那个是wildcard,如果文件存在,它将扩展为文件名,如果不存在,则扩展为空字符串......所以:

$(if $(wildcard $(file)), \
    @$(call check_size,$(shell stat -f%z $(file),$(size)))