我正在用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
我没有发现错误。有什么想法吗?
答案 0 :(得分:0)
此消息表示找不到您的规则的先决条件,也无法创建(通过“先决条件”,我的意思是$(PATHB)TestVectorCode.$(TARGET_EXTENSION)
-您未显示这些变量的值,所以我无法为您扩展它们。)
模式规则建议一种可能的方法可以建立目标。可以有很多模式可以建立相同的目标,因此其中之一不匹配这一事实本身并不是致命的。仅当所有这些都不匹配时,才会给出此错误,即找不到用于构建目标的任何规则。
在“有效规则”示例中,您必须输入错字,因为它肯定不依赖于实际上名为%
的文件,对吧?
如果无法弄清楚,您可以尝试运行make -d build/results/TestVectorCode.txt
并检查输出,以了解make拒绝您的模式规则的原因(可能会重定向输出,因为将会很多)。
另一件事是,我知道Xcode附带的GNU make版本很旧,并且有错误。我不认为它们会导致这种情况,但我不确定。如果可以,您可以尝试使用brew安装最新版本的GNU make,例如,看看是否出现相同的行为。