📜  在Makefile中定义规则(1)

📅  最后修改于: 2023-12-03 14:51:18.109000             🧑  作者: Mango

在Makefile中定义规则

Makefile是一种文件格式,用于指导程序员如何编译和构建代码。在Makefile中定义规则是编译和构建代码的核心部分。本文将介绍如何在Makefile中定义规则。

基础规则

一个基础规则由目标和依赖组成,如下所示:

target: dependency
	commands

其中:

  • target 指定了要生成的对象,如一个可执行文件或一个库文件等;
  • dependency 指定了生成 target 所需要的依赖文件;
  • commands 指定了生成 target 所需要执行的命令。

下面是一个示例:

hello: hello.c
	gcc -o hello hello.c

上面的规则指定了要将 hello.c 编译成一个可执行文件 hello。如果文件 hello.c 没有修改,那么下次执行 make 命令时,就不会重新编译了。只有在 hello.c 发生了修改,才会重新编译。

多个规则

在Makefile中,可以定义多个规则,从而构建多个不同的目标。示例:

hello: hello.c
	gcc -o hello hello.c

world: world.c
	gcc -o world world.c

上面的规则指定了要将 hello.c 编译成一个可执行文件 hello,将 world.c 编译成一个可执行文件 world

通配符规则

通配符是在Makefile中定义规则时经常用到的一种简化方式。Make自带了一些通配符字符,其中最常用的是 %。示例:

%.o: %.c
	gcc -c $< -o $@

上面的规则表示,生成 .o 文件的依赖文件是 .c 文件,$< 代表 .c 文件名,$@ 代表 .o 文件名。

变量规则

在Makefile中,可以使用变量来定义规则中的变量。示例:

CC=gcc
CFLAGS=-g -Wall

hello: hello.c
	$(CC) $(CFLAGS) -o hello hello.c

上面的规则定义了 CCCFLAGS 两个变量,并在编译时使用这两个变量。这样可以使编译规则更加灵活。

总结

本文介绍了在Makefile中定义规则的基础知识,包括基础规则、多个规则、通配符规则和变量规则等。对于需要编译和构建代码的程序员来说,掌握这些知识非常重要。