一旦我对makefile进行了一些更改,运行它之后我有以下makefile,现在当我运行它时,我得到一个“make:没有什么可以为`default'做。”我该怎么强迫它重建?我执行“make”并“make clean”,当我输入“make”时,我仍然会收到错误消息。
另外,如何将src目录中的log4.properties文件复制到目标目录(在make文件和命令行中:javac -classpath src:lib / log4j-1.2)。 16.jar src / * .java -d bin)?
# # define compiler and compiler flag variables # JFLAGS = -g -cp .:src:lib/log4j-1.2.16.jar JC = javac # # Clear any default targets for building .class files from .java files; we # will provide our own target entry to do this in this makefile. # make has a set of default targets for different suffixes (like .c.o) # Currently, clearing the default for .java.class is not necessary since # make does not have a definition for this target, but later versions of # make may, so it doesn't hurt to make sure that we clear any default # definitions for these # .SUFFIXES: .java .class # # Here is our target entry for creating .class files from .java files # This is a target entry that uses the suffix rule syntax: # DSTS: # rule # 'TS' is the suffix of the target file, 'DS' is the suffix of the dependency # file, and 'rule' is the rule for building a target # '$*' is a built-in macro that gets the basename of the current target # Remember that there must be a before the command line ('rule') # .java.class: $(JC) $(JFLAGS) $*.java # # CLASSES is a macro consisting of 4 words (one for each java source file) # CLASSES = \ src/MatrixDriver.java \ src/ConcreteMatrix.java \ src/Matrix.java \ src/Submatrix.java # # the default make target entry # default: classes # # This target entry uses Suffix Replacement within a macro: # $(name:string1=string2) # In the words in the macro named 'name' replace 'string1' with 'string2' # Below we are replacing the suffix .java of all words in the macro CLASSES # with the .class suffix # classes: $(CLASSES:.java=.class) # # RM is a predefined macro in make (RM = rm -f) # clean: FORCE $(RM) *.class FORCE:
答案 0 :(得分:2)
问题在于:
.java.class:
$(JC) $(JFLAGS) $*.java
不符合您的想法。也许你的意思是这样的?
%.class: %.java
$(JC) $(JFLAGS) $^
答案 1 :(得分:0)
我没有仔细阅读你的Makefile,我不认为自己是制作专家 但
让我认为正确的行为正是你所描述的。也许您可以在Makefile中添加依赖项。
答案 2 :(得分:0)
确保没有名为classes的文件或目录。然后,Make可以假设没什么可做的。