chapter4:makefile编写

    科技2022-07-17  93

    makefile的编写

    什么是makefilemakefile中的规则makefile中的函数三个自动变量模式规则makefile的更新机制

    什么是makefile

    makefile就是用来简化编译流程的,makefile中写的就是编译二进制文件时的gcc语句

    makefile可以:

    简化编译时所需要下达的指令。如果在编译完成后,改变了某个c文件中的功能,makefile编译只会编译被改动这个文件。可以根据时间戳来更新二进制文件。

    像如下的文件结构 一个最简单的makefile如下: 执行make命令即可编译生成二进制文件

    makefile中的规则

    makefile是由一条条规则组成的,规则由三要素组成:目标、依赖、命令。

    目标:依赖 命令

    第一条规则是是用来生成终极目标的,如果规则中的依赖不存在,则向下去寻找其他能满足这个依赖的规则的命令执行

    makefile中的函数

    查找函数 src=$(wildcast ~/src/*.c) 查找src目录下的c文件,src中保存的是带有路径的c文件名称去除路径函数 ndir=$(notdir ${src}) 将变量src中的带有路径的文件名的路径全部去掉,只保留文件名匹配替换函数 obj=$(patsubst %.c, %.o, str) 将str中匹配到的.o替换成.c

    对于如下文件结构

    编写makefile如下,输出三个函数的结果

    执行make命令输出如下

    三个自动变量

    $<: 规则中的第一个依赖,即下面规则中的main.o$^: 规则中的所有依赖, 即下面规则中的main.o,sub.o,add.o$@: 规则中的目标, 即下面规则中的myapp myapp:main.o sub.o add.o gcc $^ -o $@

    模式规则

    假如第一条规则查找依赖找到下面的这条规则时,这条规则会自动匹配是否有符合的c文件,有的话执行编译命令

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

    针对之前的文件结构,使用上述提到的函数、自动变量,模式规则编写makefile:

    makefile的更新机制

    makefile中如果有某个c文件发生了改变,在编译时仅会编译这个文件,其他的c文件不会被编译。 makefile的更新机制是根据文件的时间戳,当一个文件被改变时他的mtime会改变,当某个c文件的mtime比o文件新时,这个c文件会被重新编译。

    Processed: 0.010, SQL: 8