【发布时间】:2016-05-22 21:24:57
【问题描述】:
我是 Makefiles 的新手,目前正在编写一个。这是我目前所拥有的:
cc = gcc
EXE = foo
JAVAC = javac
JRE = java
PAGER = less
TEST_OUT = test.out
EXP_OUT = expected.out
#clean run-py run-c read run-java save-java and test-java are all phony targets.
foo.o : foo.c foo.h
$(cc) -c foo.c
main.o: main.c foo.h
$(cc) -c main.c
$(EXE): foo.o main.out
$(cc) -o$(EXE) main.o foo.o
run-c: $(EXE)
./$(EXE)
run-py: foo.py
./foo.py
read:
$(PAGER)
foo.class: foo.java
$(JAVAC) foo.java
run-java: foo.class
$(JRE) foo
save-java: foo.class
$(JRE) foo > $(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 foo.o\
rm main.o\
rm $(EXE)\
rm run-c\
rm run-py\
rm foo.class\
rm rn0java\
rm save-java\
rm test\java
在save-java 中,我想运行我的Java 程序,但将输出重定向到$(TEST_OUT)。我怎样才能做到这一点?另外,在一个教程中,我发现有人在clean 中使用了-\rm xxx。和单纯写rm xxx有什么区别?
这是输出:
make: *** No rule to make target 'test.out', needed by 'test-java'. Stop.
我想我的重定向仍然是错误的。
【问题讨论】:
-
使用
>重定向输出,-用于“静默”rm(据我所知) -
是不是像“$(JRE) foo > $(TEST_OUT)”
-
test.out、main.out和expected.out是如何生成的? -
哦,对不起!那应该是main.o。我的文件夹中已经存在 test.out 和 expected.out。
-
@user657267 嗨,我刚刚发现我无法生成
test.out.. 可能是我的重定向错误。