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中文网其他相关文章!