Makefile

Makefile 是一种构建工具,其语法与 Shell 脚本类似,使用一系列目标、依赖和命令组成的规则来描述构建过程。Makefile 具有以下组成部分:

  • 变量:定义变量用于存放一些通用的信息,例如目标源文件、编译器路径等等。

  • 目标(Target):表示文件或操作的名称。目标指定要生成或更新的文件。目标可以是实际的文件,也可以是make命令后指定的操作。

  • 依赖(Dependencies):指定目标生成的必要条件。它可以是一个或多个文件,也可以是一个操作。当依赖的任何一个文件更新时,我们需要更新目标。说白一点就是说,Dependencies中如果有一个以上的文件比Target文件要的话,commands中的命令就会被执行

  • 命令(Commands):执行目标必要的操作。它是一个 Shell 命令列表,每行以tab开始 ,命令前加@不会回显命令。

  • 伪目标(.PHONY Target):指定一些不产生实际输出文件的目标,如’clean’ 或’rebuild’等。伪目标只有Commands没有Dependencies。例如

    .PHONY: clean
    ## 定义了一个名为“clean”的 .PHONY 目标。当执行 make clean 命令时,由于 .PHONY 目标不会产生任何输出文件,所以 Make 工具不会因为找不到与 .PHONY 目标同名的文件而报错。
    
  • 注释:为 Makefile 添加注释,以便使它的结构更易于理解。

下面是一个 Makefile 的例子,展示了其主要的语法:


CC = gcc
CFLAGS = -Wall -Wextra -Werror

all: main.o utils.o
    $(CC) $(CFLAGS) -o myapp main.o utils.o
    @echo "build complete!"

main.o: main.c utils.h
    $(CC) $(CFLAGS) -c main.c

utils.o: utils.c utils.h
    $(CC) $(CFLAGS) -c utils.c

.PHONY: clean
clean:
    rm -f *.o myapp

在此Makefile中,我们定义了两个变量CC和CFLAGS,用于指定编译器和编译选项。然后定义了一个名为all的目标,依赖于main.o和utils.o两个目标。我们在这里使用 cc 和 cflags 来将这两个目标编译为一个可执行文件 myapp。在与每个目标对应的命令前,我们使用双制表符或四个空格符号进行缩进。最后,我们使用.PHONY来指定伪目标clean,便于清理生成的.o文件及可执行文件.

上述Makefile的使用命令如下:

makemake all:编译生成可执行程序myapp。

make clean:清理Makefile生成的.target和.o文件以及可执行文件myapp。

在执行makemake all命令后,Make会根据all目标的依赖情况,生成main.o和utils.o两个目标,然后编译生成可执行程序myapp。如果两个目标在上次编译后没有更新,Make会跳过编译步骤,以提高编译速度。执行完成后,Make会在终端输出 build complete! 的信息提示。

当执行make clean命令时,Make会删除所有的.o文件和myapp可执行文件,以帮助我们清理我们项目的构建目录。


变量的定义

var = value

类似于C语言中的宏定义,变量在引用时,严格按照文本替换,变量的值原样出现在引用的地方.
Makefile有三个非常有用的变量,叫做自动化变量。分别是$@,$^,$<代表的意义分别是:

$@–目标文件,
$^–所有的依赖文件,
$<–第一个依赖文件。

使用上面三个变量,可以简化我们的Makefile文件.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值