【问题标题】:make file for Java/Linux为 Java/Linux 制作文件
【发布时间】:2012-04-13 16:55:46
【问题描述】:

一旦我对 makefile 进行了一些更改,运行它后我就有了以下 makefile,现在当我运行它时,我得到一个“make: Nothing to be done for `default'”。我怎样才能强制它重建?我执行“make”和“make clean”,当我输入“make”时仍然收到错误消息。

另外,我如何将 src 目录中的 log4.properties 文件复制到目标目录(在 make 文件和命令行中:javac -classpath src:lib/log4j-1.2. 16.jar src/*.java -d bin)?

# # 定义编译器和编译器标志变量 # JFLAGS = -g -cp .:src:lib/log4j-1.2.16.jar JC = javac # # 清除任何用于从 .java 文件构建 .class 文件的默认目标;我们 # 将在此生成文件中提供我们自己的目标条目来执行此操作。 # make 有一组不同后缀的默认目标(如 .c.o) # 目前,不需要清除 .java.class 的默认值,因为 # make 没有这个目标的定义,但是更高版本的 # make may,所以确保我们清除任何默认值并没有什么坏处 # 这些的定义 # .后缀:.java .class # # 这是我们从 .java 文件创建 .class 文件的目标条目 # 这是一个使用后缀规则语法的目标条目: #DSTS: # 规则 # 'TS'是目标文件的后缀,'DS'是依赖的后缀 # 文件,'rule' 是构建目标的规则 # '$*' 是一个内置宏,用于获取当前目标的基本名称 # 记住命令行前必须有a ('rule') # .java.class: $(JC) $(JFLAGS) $*.java # # CLASSES 是一个由 4 个单词组成的宏(每个 java 源文件一个) # 课程 = \ 源代码/MatrixDriver.java \ 源代码/ConcreteMatrix.java \ 源/矩阵.java \ src/Submatrix.java # # 默认的 make 目标条目 # 默认:类 # # 此目标条目在宏中使用后缀替换: # $(名称:string1=string2) # 在名为 'name' 的宏中将 'string1' 替换为 'string2' # 下面我们替换宏CLASSES中所有单词的后缀.java # 带有 .class 后缀 # 类:$(CLASSES:.java=.class) # # RM 是 make 中预定义的宏 (RM = rm -f) # 清洁:力 $(RM) *.class 力量:

【问题讨论】:

  • 我为输出目录添加了-d bin,但只是将其取出。我仍然在做:“默认”无事可做。
  • 有点跑题了,但你可能想看看更针对 Java 的构建工具,例如蚂蚁或 Maven。一旦获得多个依赖项,能够将**/*.jar 放在类路径上会非常方便。
  • 只是想插话 Maven ——绝对是为了你的理智而走的路,我...

标签: java linux makefile


【解决方案1】:

问题是这样的:

.java.class:
    $(JC) $(JFLAGS) $*.java

没有做你认为它做的事。也许你的意思是这样的?

%.class: %.java
    $(JC) $(JFLAGS) $^

【讨论】:

  • 当我做出改变时,我得到这个:“makefile:34: *** target pattern contains no `%'. Stop.”
【解决方案2】:

我没有仔细阅读你的 Makefile,我不认为自己是 make 专家 但是

  1. 似乎对 Makefile 本身没有任何依赖关系
  2. 你改变的只是 Makefile

让我认为正确的行为正是您所描述的。也许您可以向 Makefile 添加依赖项。

【讨论】:

    【解决方案3】:

    确保没有称为类的文件或目录。然后,Make 可以假设无事可做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 2013-11-18
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      相关资源
      最近更新 更多