Java 中的 makefile

Rupam Yadav 2023年1月30日 2022年4月27日
  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
Author: 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