Makefile 没有要成为目标的规则,但该规则存在

Makefile 没有要成为目标的规则,但该规则存在,makefile,Makefile,我想编写一些Makefile,通过Unity测试框架测试C代码。 然而,当我想要测试它时,我得到了消息make:**“unity\u-test”所需的使目标“unity\u-build/results/test\u-unity\u-dumb\u-example.unity\u-res”没有规则。停止。。我无法找出什么是错误的,因为对于匹配模式的文件有一条规则:$(UNITY\u PATHR)%。UNITY\u res: 以下是我的Makefile的开头: UNITY_PATHU = ${UNIT

我想编写一些Makefile,通过Unity测试框架测试C代码。 然而,当我想要测试它时,我得到了消息
make:**“unity\u-test”所需的使目标“unity\u-build/results/test\u-unity\u-dumb\u-example.unity\u-res”没有规则。停止。
。我无法找出什么是错误的,因为对于匹配模式的文件有一条规则:
$(UNITY\u PATHR)%。UNITY\u res:

以下是我的Makefile的开头:

UNITY_PATHU = ${UNITY_INSTALL_DIR}/
UNITY_PATHS = src/
UNITY_PATHS += src/unity_dumb_example/
UNITY_PATHT = unity_test/
UNITY_PATHB = unity_build/
UNITY_PATHD = unity_build/depends/
UNITY_PATHO = unity_build/objs/
UNITY_PATHR = unity_build/results/

UNITY_BUILD_PATHS = $(UNITY_PATHB) $(UNITY_PATHD) $(UNITY_PATHO) $(UNITY_PATHR)

# Tell compiler where to look for all test files
UNITY_SRCT = $(wildcard $(UNITY_PATHT)*.c)

UNITY_COMPILER=gcc -c
UNITY_LINKER=gcc
UNITY_DEPEND=gcc -MM -MG -MF
UNITY_CFLAGS=-I. -I$(UNITY_PATHU) -I$(UNITY_PATHS) -DTEST

UNITY_RESULTS = $(patsubst $(UNITY_PATHT)test_%.c,$(UNITY_PATHR)test_%.unity_res,$(UNITY_SRCT))

unity_test: $(UNITY_BUILD_PATHS) $(UNITY_RESULTS)
    @echo "-----------------------\nIGNORES:\n-----------------------"
    @echo `grep -s IGNORE $(UNITY_PATHR)*.unity_res`
    @echo "-----------------------\nFAILURES:\n----------------------"
    @echo `grep -s FAIL $(UNITY_PATHR)*.unity_res`
    @echo "\nDONE"

$(UNITY_PATHR)%.unity_res: $(UNITY_PATHB)%.out
    ./$< > $@ 2>&1
所有需要的路径都存在

当我在调试模式
-d
下运行make时,我可以看到make正在使用stem
test\u test\u unity\u dumb\u example
而不是
test\u unity\u dumb\u example
尝试模式规则,例如:

Trying pattern rule with stem 'test_test_unity_dumb_example'
测试是我的错误,但我已经改正了。我还是不能让它工作

当我使用
-p
运行时,我可以在输出中找到如下内容:

# Implicit Rules

unity_build/results/%.unity_res: unity_build/%.out
#  recipe to execute (from 'Makefile.unity', line 30):
    ./$< > $@ 2>&1
#隐式规则
unity_build/results/%。unity_res:unity_build/%。out
#要执行的配方(来自“Makefile.unity”,第30行):
./$< > $@ 2>&1
已解决

问题在于
$(UNITY\u PATHB)%的先决条件。out
。确切地说,一个关键源文件的路径是
${UNITY\u INSTALL\u DIR}/src
,而不是
${UNITY\u INSTALL\u DIR}/

然而,我仍然觉得奇怪,make抱怨目标规则比无法构建的目标高出2级。

如果您清理项目并删除所有生成的文件以从头开始,您是否看到正在构建的文件
unity\u build/results/test\u unity\u dumb\u示例。unity\u res
?如果
$(UNITY\u BUILD\u path)
中的任何路径不存在,会发生什么情况?在完全清除之后,您可以再次运行<代码>使< /代码>,然后编辑您的问题以包含完整的输出吗?此外,您可以考虑使用<代码> -d>代码>选项> <代码>使显示调试信息。使用它可能会帮助您了解发生了什么。也可以使用
-p
选项打印规则数据库。请参见例如:
unity\u build/test\u unity\u dumb\u示例。在执行Make之前是否存在out
?之后呢?我在您的输出中没有看到任何表示构建它的内容,但是我看到一个建议,即
unity\u build/
目录在一开始就不存在。请给我们一封信。(你在这里已经三年了,没有人告诉过你这些吗?)你的路径可能是错误的,这就是为什么
make
不能符合规则的原因。打印
UNITY\u RESULTS
以查看它是什么。如果您清理项目并删除所有生成的文件以从头开始,您是否看到正在生成的文件
UNITY\u build/RESULTS/test\u UNITY\u dumb\u示例。UNITY\u res
?如果
$(UNITY\u BUILD\u path)
中的任何路径不存在,会发生什么情况?在完全清除之后,您可以再次运行<代码>使< /代码>,然后编辑您的问题以包含完整的输出吗?此外,您可以考虑使用<代码> -d>代码>选项> <代码>使显示调试信息。使用它可能会帮助您了解发生了什么。也可以使用
-p
选项打印规则数据库。请参见例如:
unity\u build/test\u unity\u dumb\u示例。在执行Make之前是否存在out
?之后呢?我在您的输出中没有看到任何表示构建它的内容,但是我看到一个建议,即
unity\u build/
目录在一开始就不存在。请给我们一封信。(你在这里已经三年了,没有人告诉过你这些吗?)你的路径可能是错误的,这就是为什么
make
不能符合规则的原因。打印
UNITY\u结果
,查看它是什么。
# Implicit Rules

unity_build/results/%.unity_res: unity_build/%.out
#  recipe to execute (from 'Makefile.unity', line 30):
    ./$< > $@ 2>&1