
- Makefile 教程
- Makefile - 首頁
- Makefile - 為什麼使用 Makefile?
- Makefile - 宏
- Makefile - 依賴關係
- Makefile - 規則
- Makefile - 字尾規則
- Makefile - 指令
- Makefile - 重新編譯
- Makefile - 其他功能
- Makefile - 示例
- Makefile 快速指南
- Makefile - 快速指南
- Makefile - 有用資源
- Makefile - 討論
在 Makefile 中定義規則
現在我們將學習 Makefile 的規則。
Makefile 目標規則的一般語法如下:
target [target...] : [dependent ....] [ command ...]
在上面的程式碼中,括號中的引數是可選的,省略號表示一個或多個。這裡需要注意的是,每個命令前面都需要使用製表符。
下面給出一個簡單的示例,其中定義了一個規則,用於從其他三個檔案建立目標 hello。
hello: main.o factorial.o hello.o $(CC) main.o factorial.o hello.o -o hello
注意 - 在此示例中,您需要提供規則,以便從原始檔建立所有目標檔案。
語義非常簡單。當您說“make target”時,make 會找到適用的目標規則;並且,如果任何依賴項比目標更新,make 就會依次執行這些命令(在宏替換之後)。如果需要建立任何依賴項,則會首先建立它們(因此您有一個遞迴)。
如果任何命令返回失敗狀態,Make 將終止。在這種情況下,將顯示以下規則:
clean: -rm *.o *~ core paper
Make 忽略以連字元開頭的命令列上的返回狀態。例如,誰在乎是否有核心檔案?
Make 會在宏替換後回顯命令,以向您顯示正在發生的事情。有時您可能希望關閉它。例如:
install: @echo You must be root to install
人們已經習慣了 Makefile 中的某些目標。您應該始終先瀏覽一下。但是,可以合理地預期會找到 all(或僅 make)、install 和 clean 目標。
make all - 它編譯所有內容,以便您可以在安裝應用程式之前進行本地測試。
make install - 它將應用程式安裝到正確的位置。
make clean - 它清理應用程式,刪除可執行檔案、任何臨時檔案、目標檔案等。
Makefile 隱式規則
該命令應該在所有情況下都能工作,在這些情況下,我們從原始碼 x.cpp 構建可執行檔案 x。這可以表示為一個隱式規則:
.cpp: $(CC) $(CFLAGS) $@.cpp $(LDFLAGS) -o $@
此隱式規則說明了如何從 x.c 建立 x -- 對 x.c 執行 cc 並將輸出稱為 x。該規則是隱式的,因為沒有提到特定的目標。它可以在所有情況下使用。
另一個常見的隱式規則是用於從 .cpp(原始檔)構建 .o(目標)檔案。
.cpp.o: $(CC) $(CFLAGS) -c $< alternatively .cpp.o: $(CC) $(CFLAGS) -c $*.cpp