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