重定向Makefile中的Java输出
我是Makefiles的新手,目前正在编写一个。这就是我到目前为止所做的:重定向Makefile中的Java输出,java,unix,makefile,Java,Unix,Makefile,我是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 = 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
在保存java
中,我想运行我的java程序,但将输出重定向到$(TEST\u OUT)
。我怎样才能做到这一点?另外,在一个教程中,我发现有人在clean
中使用了-\rm xxx
。它与简单地写rmxxx
有什么不同吗
这是输出:
make:**“测试java”所需的目标“test.out”无规则生成。停止
我想我的重定向仍然是错误的。除了我不确定您的C和java程序之间的关系之外,以下是我认为您正在尝试的
target:=foo
test:=test.out
应为:=应为.out
JAVAC:=JAVAC
JAVAFLAGS:=
JRE:=java
main.o$(目标).o:%.o:%.h
$(目标):$(目标).o main.o
%.class:%.java
$(JAVAC)$(JAVAFLAGS)$^
$(测试输出):$(目标).class
$(JRE)$<>$@
.PHONY:java测试清理
java测试:$(测试输出)$(测试输出)
diff-q$^
清洁:$(RM)$(目标).o main.o$(目标)$(目标).class
应该是指向默认编译器(或编译器本身)的文件链接,您不需要在makefile中定义它。默认情况下,将cc
设置为CC
,并在C源文件和链接的隐式规则中使用CC
CC
- 我看不出你们提到的很多所谓的
。虚假的
目标有什么用处,你们为什么要删除它们?它们不是文件
- Make已经知道如何编译C源文件,它还将自动链接
,因为它的先决条件之一是foo
foo.o
已经有一个“这两个文件相同吗”标志(diff
)-q
- 您应该在顶部有一个名为
的all
目标来执行默认操作,但我不知道在这种情况下会是什么.PHONY
重定向输出,并且-
用于“静默”rm
(据我所知)是否像“$(JRE)foo>$(TEST_OUT)”那样TEST.OUT
、main.OUT
和应该如何生成?噢,对不起!那应该是主要的。test.out和expected.out已经存在于我的文件夹中。@user657267您好,我刚刚发现我无法生成test.out
。。也许我的重定向是错误的。事实上我刚刚完成它,但仍然非常感谢你。