为Java / Linux创build文件

我运行一次后,我有以下的生成文件,一旦我做了一些更改的生成文件,现在当我运行它,我得到一个“做:没有什么可做的默认”。 我怎样才能强迫它重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,我不认为自己是一个专家,但是

  1. 似乎没有任何依赖Makefile本身
  2. 所有你改变的是Makefile

导致我认为正确的行为正是你所描述的。 也许你可以添加一个依赖到Makefile。

确保没有文件或目录称为类。 然后,制造商可以无所作为。