Mac Mojave上的makefile'%'通配符问题

时间:2018-11-15 06:05:57

标签: makefile

我正在用c做一个项目,并利用统一测试框架。我已经直接下载了他们的makefile,但是在Mac(Mojave)上却遇到了问题。基本结论是目标定义中的'%'通配符似乎不起作用。

遵循以下规则:

PATHR = build/results/
$(PATHR)%.txt: $(PATHB)%.$(TARGET_EXTENSION)
    -./$< > $@ 2>&1

我收到以下make错误:

make: *** No rule to make target `build/results/TestVectorCode.txt', needed by `test'.  Stop.

但是,如果我明确定义规则而不使用'%',如下所示:

build/results/TestVectorCode.txt: $(PATHB)%.$(TARGET_EXTENSION)
    -./$< > $@ 2>&1

我没有发现错误。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

此消息表示找不到您的规则的先决条件,也无法创建(通过“先决条件”,我的意思是$(PATHB)TestVectorCode.$(TARGET_EXTENSION) -您未显示这些变量的值,所以我无法为您扩展它们。)

模式规则建议一种可能的方法可以建立目标。可以有很多模式可以建立相同的目标,因此其中之一不匹配这一事实本身并不是致命的。仅当所有这些都不匹配时,才会给出此错误,即找不到用于构建目标的任何规则。

在“有效规则”示例中,您必须输入错字,因为它肯定不依赖于实际上名为%的文件,对吧?

如果无法弄清楚,您可以尝试运行make -d build/results/TestVectorCode.txt并检查输出,以了解make拒绝您的模式规则的原因(可能会重定向输出,因为将会很多)。

另一件事是,我知道Xcode附带的GNU make版本很旧,并且有错误。我不认为它们会导致这种情况,但我不确定。如果可以,您可以尝试使用brew安装最新版本的GNU make,例如,看看是否出现相同的行为。