每当我尝试运行此命令时,我得到的唯一输出是“ make:foo.o是最新的”。似乎程序的其余部分没有运行,我也不知道为什么。我的指令如下:“编译C程序。运行C程序。运行Python程序。编译并运行Java程序。检查自述文件,显示它。比较2个文件。清理中间文件。”
cc = gcc
EXE = foo
JAVAC = javac
JRE = java
PAGER = less
TEST_OUT = test.out
EXP_OUT = expected.out
foo.o: foo.c foo.h
$(cc) -c foo.c
main.o: main.c foo.h
$(cc) -c main.c
$(EXE): foo.o main.o
$(cc) -o$(EXE) main.o foo.o
run-c: $(EXE)
./$(EXE)
run-py:
./foo.py
read: README
$(PAGER)
foo.class: foo.java
$(JAVAC) foo.java
run-java: foo.cass
$(JRE) foo
save-java:
./(run-java) >> $(TEST_OUT)
test-java: $(TEST_OUT) $(EXP_OUT)
@if diff $(TEST_OUT) $(EXP_OUT) &> /dev/null ; then \
echo "Passed!" ;\
else \
echo "Not the same!" ;\
fi
clean:
-rm test.out
答案 0 :(得分:0)
每当我尝试运行此命令时,我得到的唯一输出是“ make:foo.o是最新的。”
默认情况下,make
在未指定目标时运行最高规则。例如,您必须运行make run-c
来调用相应的配方,或者可以将all
规则放在任何其他依赖且起作用的规则之前。>
read: README $(PAGER)
我怀疑您可能会错过将$@
后面的$(PAGER)
作为参数。
save-java: ./(run-java) >> $(TEST_OUT)
您不能仅以此方式“包括”其他食谱。相反,重复run-java
中的内容并附加重定向。
如果要指定“伪”目标,建议您将其指定为.PHONY
,例如:
.PHONY: all run-c run-py run-java save-java test-java clean
要将某些目标标记为中间文件,请使用.INTERMEDIATE
伪指令。 online和通过info
命令都可以使用GNU Make手册(texinfo)。