Java 中的 makefile

Rupam Yadav 2023年10月12日
  1. 使用 Makefile 管理 Java 中的大型项目
  2. 在 Java 中使用 Makefile 的例子
Java 中的 makefile

Makefile 是 make 实用程序在使用时需要的特殊格式文件。

当我们为一个大型项目编写程序时,我们可能需要手动编译每个程序,这可能很耗时,而这正是 makefile 可以使这项任务变得简单快捷的地方。

使用 Makefile 管理 Java 中的大型项目

Makefile 是一种通过编译和链接来管理大型项目文件的方法。一个简单的 makefile 包含变量和规则。

下面是创建规则的基本语法。

target... : prerequisites...
<TAB>command...

在上述语法中,target 是要生成的程序的名称。先决条件或依赖项是用于创建目标的文件。

我们在以 tab 开头的 command 中编写命令。我们可以在生成文件中使用变量来存储文本字符串,以消除命令和规则的重复使用。

编译包含多个文件的项目是一项耗时的任务,每当我们对文件进行任何更改时,我们都必须重复相同的命令。

每当有更改时,可以使用 makefile 来编译 Java 文件来节省这段时间。请注意,当单个文件中发生修改时,makefile 仅编译更改的文件,而不是编译每个文件。

在 Java 中使用 Makefile 的例子

我们有三个 Java 文件作为示例。第一个 Java 文件包含三个类,而这两个文件包含单个类。

为了编译所有文件,我们每次都需要使用 javac 命令,但我们使用 makefile 来编译这些文件。

在下面的 makefile 中,我们首先指定要使用的编译器 javac,并将其存储在变量 JC 中。接下来,指定要使用的后缀。

现在我们使用上面学到的语法创建一个目标,.java.class 是目标,而 $(JC) $*.java 是创建目标要执行的命令。

我们创建另一个宏,其中包含我们要在执行 makefile 时编译的所有 Java 文件。Makefiles 只理解制表符空间,或者我们可以使用\ 运算符来中断语句。

我们用 CLASSES 宏指定 default 目标。在下一条语句中,我们创建另一个目标 classes,将包含 .java 的文件替换为 .class 并将其存储在 CLASSES 中。

最后一个目标是使用命令 $(RM) *.class 清理类文件。

JC =javac
.SUFFIXES:.java .class
.java.class:
	$(JC) $*.java

CLASSES = \
	JavaExample.java\
	JavaExample2.java\
	JavaExample3.java

default:CLASSES

classes:$(CLASSES:.java=.class)

clean:\
	$(RM) *.class

要执行 makefile,我们在命令行中使用以下命令。

make -f makefile

这里,make 是实用命令,而 -f 是文件的参数,makefile 是我们的 makefile 的文件名。

当我们执行命令时,我们得到以下输出。

javac JavaExample.java
javac JavaExample2.java
javac JavaExample3.java

在此之后,当有更改时生成类文件,我们运行命令,

Java 示例类:

public class JavaExample {
  public static void main(String args[]) {
    Motorcycle motorcycle = new Motorcycle();
    System.out.println(motorcycle.getClassName());
  }
}
class Vehicle {
  String getClassName() {
    return "Vehicle Class";
  }
}
class Motorcycle extends Vehicle {
  String getClassName() {
    return "Motorcycle Class Child of " + super.getClassName();
  }
}

输出:

Motorcycle Class Child of Vehicle Class

Java 示例 2 类:

public class JavaExample2 {
  public static void main(String[] args) {
    System.out.println("Java Example 2");
  }
}

输出:

Java Example 2

Java 示例 3 类:

public class JavaExample3 {
  public static void main(String[] args) {
    System.out.println("Java Example 3");
  }
}

输出:

Java Example 3
作者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn