【发布时间】:2018-08-02 22:41:25
【问题描述】:
我是新手,正在尝试创建一个 makefile,例如,我可以运行:
make -f mymakefile testfile
makefile 会找到 testfile.java(存在于我运行的目录中),编译它,然后运行代码。
相反,我一定对自动变量的工作方式感到困惑,并且在整个下午工作后我仍然得到错误:
make: Nothing to be done for `testfile'.
任何帮助将不胜感激,我的代码如下:
JC=javac
JVM=java
JFLAGS= -g
RM = rm -f
CFLAGS =
CXX = gcc
NAME = *
.SUFFIXES: .java .class
all: run
NAME:
$(CXX) $(CFLAGS) -o $^ $@
echo $(NAME)
$(NAME).class: $(NAME)
$(JC) $(JFLAGS) $(NAME).java
run: $(NAME).class
$(JVM) $(NAME)
.PHONY: clean
clean:
$(RM) $(NAME).class
我试过让它 echo 'testfile' 更好地理解自动变量的工作原理,但我也无法让它正常工作。
【问题讨论】:
-
$<是传入的源文件名。$@是输出文件名。如果您有一个源文件,则配方可能会像$(CXX) $(CXXFLAGS) -o $@ $<一样精心制作。此外,$(CC)使用$(CFLAGS),$(CXX)使用$(CXXFLAGS)。