我运行一次后,我有以下的生成文件,一旦我做了一些更改的生成文件,现在当我运行它,我得到一个“做:没有什么可做的默认”。 我怎样才能强迫它重build? 我执行“make”并且“make clean”,当我input“make”的时候,我仍然得到错误信息。
另外,如何获取src目录中的log4.properties文件复制到目标目录(在make文件和命令行中:javac -classpath src:lib / log4j-1.2.16.jar src / *。java -d bin)?
# #定义编译器和编译器标志variables # JFLAGS = -g -cp。:src:lib / log4j-1.2.16.jar JC = javac # #清除.java文件中的任何构build.class文件的默认目标; 我们 #将提供我们自己的目标条目在这个makefile中做这件事。 #make有一套不同后缀的默认目标(如.co) #目前,清除.java.class的默认值是没有必要的,因为 #make没有这个目标的定义,但后来的版本 #make may,所以确保我们清除任何默认值并没有什么坏处 #这些定义 # .SUFFIXES:.java .class # #这是我们从.java文件创build.class文件的目标条目 #这是使用后缀规则语法的目标条目: #DSTS: # 规则 #'TS'是目标文件的后缀,'DS'是依赖项的后缀 #文件和“规则”是build立一个目标的规则 #'$ *'是一个内置的macros,它获取当前目标的基本名称 #请记住,在命令行('规则')之前必须有一个 # .java.class: $(JC)$(JFLAGS)$ *。java # #CLASSES是一个由4个字组成的macros(每个java源文件一个) # CLASSES = \ src / MatrixDriver.java \ src / ConcreteMatrix.java \ src / Matrix.java \ SRC / Submatrix.java # #默认make目标条目 # 默认:类 # #这个目标条目在macros中使用后缀replace: #$(name:string1 = string2) #在名为“name”的macros中,用“string2”replace“string1” #下面我们正在replacemacrosCLASSES中所有单词的后缀.java #与.class后缀 # 类:$(CLASSES:.java = .class) # #RM是make中的预定义macros(RM = rm -f) # 干净:强制 $(RM)* .class 力:
问题是这样的:
.java.class: $(JC) $(JFLAGS) $*.java
不做你认为的事情。 也许你的意思是这样的?
%.class: %.java $(JC) $(JFLAGS) $^
我没有仔细阅读你的Makefile,我不认为自己是一个专家,但是
导致我认为正确的行为正是你所描述的。 也许你可以添加一个依赖到Makefile。
确保没有文件或目录称为类。 然后,制造商可以无所作为。