在 Linux 的 Makefile 中,目标是要生成的文件或执行的操作
- 显式规则:这是最常用的方法,用于指定一个或多个目标文件及其依赖关系。语法如下:
target: prerequisites [TAB] recipe
target
是要生成的文件。prerequisites
是生成目标所需的输入文件。recipe
是生成目标所需的命令(操作)。注意,命令前面需要有一个制表符(TAB)。
例如,以下 Makefile 指定了一个名为 my_program
的目标,它依赖于 main.c
和 util.c
两个源文件:
my_program: main.c util.c gcc -o my_program main.c util.c
- 隐式规则:这种方法允许你使用预定义的规则,而无需显式指定目标、依赖关系和操作。隐式规则基于文件的扩展名(如 .c、.o 等)自动应用。例如,以下 Makefile 将自动应用隐式规则来编译和链接 C 程序:
CC = gcc CFLAGS = -Wall OBJFILES = main.o util.o my_program: $(OBJFILES) $(CC) $(CFLAGS) -o my_program $(OBJFILES)
- 模式规则:这种方法允许你定义一组通用规则,以便根据特定模式生成目标。语法如下:
target_pattern: prerequisite_pattern [TAB] recipe
例如,以下 Makefile 使用模式规则将所有 .c 文件编译为 .o 文件:
CC = gcc CFLAGS = -Wall %.o: %.c $(CC) $(CFLAGS) -c $< -o $@
- 伪目标:这些目标不代表实际的文件,而是表示一组操作。伪目标通常用于执行特定任务,如清理、安装等。要将目标声明为伪目标,需要在 Makefile 开头添加
.PHONY
声明:
.PHONY: clean clean: rm -f *.o my_program
在这个例子中,clean
是一个伪目标,它删除所有 .o 文件和名为 my_program
的可执行文件。
总之,Makefile 中的目标可以通过显式规则、隐式规则、模式规则和伪目标来指定。根据项目的需求和复杂性,可以选择合适的方法来定义目标。