温馨提示×

Linux Makefile中的目标如何指定

小樊
91
2024-09-03 11:56:03
栏目: 智能运维

在 Linux 的 Makefile 中,目标是要生成的文件或执行的操作

  1. 显式规则:这是最常用的方法,用于指定一个或多个目标文件及其依赖关系。语法如下:
target: prerequisites
[TAB] recipe
  • target 是要生成的文件。
  • prerequisites 是生成目标所需的输入文件。
  • recipe 是生成目标所需的命令(操作)。注意,命令前面需要有一个制表符(TAB)。

例如,以下 Makefile 指定了一个名为 my_program 的目标,它依赖于 main.cutil.c 两个源文件:

my_program: main.c util.c
    gcc -o my_program main.c util.c
  1. 隐式规则:这种方法允许你使用预定义的规则,而无需显式指定目标、依赖关系和操作。隐式规则基于文件的扩展名(如 .c、.o 等)自动应用。例如,以下 Makefile 将自动应用隐式规则来编译和链接 C 程序:
CC = gcc
CFLAGS = -Wall
OBJFILES = main.o util.o

my_program: $(OBJFILES)
    $(CC) $(CFLAGS) -o my_program $(OBJFILES)
  1. 模式规则:这种方法允许你定义一组通用规则,以便根据特定模式生成目标。语法如下:
target_pattern: prerequisite_pattern
[TAB] recipe

例如,以下 Makefile 使用模式规则将所有 .c 文件编译为 .o 文件:

CC = gcc
CFLAGS = -Wall

%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@
  1. 伪目标:这些目标不代表实际的文件,而是表示一组操作。伪目标通常用于执行特定任务,如清理、安装等。要将目标声明为伪目标,需要在 Makefile 开头添加 .PHONY 声明:
.PHONY: clean

clean:
    rm -f *.o my_program

在这个例子中,clean 是一个伪目标,它删除所有 .o 文件和名为 my_program 的可执行文件。

总之,Makefile 中的目标可以通过显式规则、隐式规则、模式规则和伪目标来指定。根据项目的需求和复杂性,可以选择合适的方法来定义目标。

0