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 $< -o $@
.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 $< -o $@ # Déclaration des cibles phony .PHONY: all clean fclean re # Nettoyage des fichiers objets clean: rm -f $(OBJECTS) # Nettoyage complet (fichiers objets et exécutable) fclean: clean rm -f $(TARGET) # Refaire la compilation re: fclean all
使用製表符縮排:規則中的命令應使用製表符縮進,而不是空格。
註解程式碼:使用註解來解釋 Makefile 的各個部分。
分組文件:如果您的專案包含多個文件,請將它們組織到子目錄中並使用變數來管理路徑。
使用隱式規則:利用make的內建規則,避免重寫通用規則。
避免衝突:如果存在與目標同名的文件,make會認為目標是最新的,不會執行關聯的命令。 .PHONY 避免了這種情況。
效能改進:虛假目標始終被視為“待辦事項”,這可以提高關聯命令的執行速度。
效率:使用 %.o:%c 可以讓您受益於 make 最佳化,只重新編譯必要的內容。
實用:對於較大的項目,%.o:%c 較為合適。
結構良好的 Makefile 讓專案管理更加容易並避免編譯錯誤。透過遵循這些規則和最佳實踐,您可以建立高效且可維護的 Makefile。
以上是理解Makefile(以C語言為例)。的詳細內容。更多資訊請關注PHP中文網其他相關文章!