Makefile 是 make 工具用來自動編譯程式的檔案。以下是編寫有效 Makefile 的標準規則和最佳實踐:
target: prerequisites command
預設規則:Makefile 中的第一個目標是預設建置的目標。
編譯原始檔:
CC = gcc CFLAGS = -Wall -g SOURCES = main.c utils.c OBJECTS = $(SOURCES:.c=.o) TARGET = mon_programme $(TARGET): $(OBJECTS) $(CC) -o $@ $^ %.o: %.c $(CC) $(CFLAGS) -c $
- Phonies:對非文件目標使用 .PHONY。
.PHONY: clean clean: rm -f $(OBJECTS) $(TARGET)
- 變數:使用變數來簡化路徑和選項的管理。
CC = gcc CFLAGS = -Wall
依賴管理:使用隱式規則和模式來減少重複。
自動依賴關係:可以為.o檔案自動產生依賴關係。
-include $(OBJECTS:.o=.d)完整範例
這是一個完整的Makefile範例:
# Variables CC = gcc CFLAGS = -Wall -g SOURCES = main.c utils.c OBJECTS = $(SOURCES:.c=.o) TARGET = mon_programme # Règle par défaut all: $(TARGET) # Lien de l'exécutable # $@ -> $(TARGET) # $^ -> $(OBJECTS) $(TARGET): $(OBJECTS) $(CC) -o $@ $^ # Compilation des fichiers .c en .o # $ Premier element des pr %.o: %.c $(CC) $(CFLAGS) -c $良好做法
用製表符縮排:規則中的命令必須用製表符縮進,而不是空格。
註解程式碼:使用註解來解釋 Makefile 的各個部分。
分組文件:如果您的專案包含多個文件,請將它們組織到子目錄中並使用變數來管理路徑。
使用隱式規則:利用make的內建規則,避免重寫公共規則。
為什麼要使用.PHONY?
避免衝突:如果存在與目標同名的文件,make會認為目標是最新的,不會執行關聯的命令。 .PHONY 避免了這種情況。
效能改進: 虛假目標始終被視為“待辦事項”,這可能會提高關聯命令的執行速度。
效率:使用 %.o:%c 可以讓您受益於 make 最佳化,只重新編譯必要的內容。
實用:對於較大的項目,%.o:%c 較為合適。
結構良好的 Makefile 讓專案管理更加容易並避免編譯錯誤。透過遵循這些規則和最佳實踐,您可以建立高效且可維護的 Makefile。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3