Makefile简单介绍

Makefile(1)

app:main.c add.c sub.c mul.c
        gcc main.c add.c sub.c mul.c -o app
  1. 格式为:目标:依赖 \n\t命令
  2. 意义就是将gcc命令搬到makefile中

Makefile(2)

  1. 由于Makefile(1)每次make都需要编译所有文件,耗时。所以每次有文件修改了只需要编译所改动的文件生成对应的.o文件,然后make自动进行链接即可
app:main.o add.o mul.o
        gcc main.o add.o mul.o -o app

main.o:main.c
        gcc -c main.c

add.o:add.c
        gcc -c add.c

mul.o:mul.c
        gcc -c mul.c
  1. 第一次编译会生成所有的.o,然后有文件更新的话,make只需要通过文件的时间戳来判断然后只编译改动的文件
  2. 过程:先看gcc第一层依赖,如果还没有便向下查找依赖, 递归编译最终得到最后的目标

Makefile(3)

  1. 我们看到Makefile(2)很多文本冗余,如第一二行相同内容,后三个模块格式基本一致。所以可以采用makefile中的变量和格式
  2. 变量直接用=赋值,${v_name}(括号也行)来取变量值
  3. 常见模式规则:
    • %匹配多个字符,表示相同的一部分内容
    • $<:表示规则中的第一个依赖
    • $@:表示规则中的目标
    • $^:表示规则中的所有依赖
obj = main.o add.o sub.o mul.o
target = app

${target}:${obj}
        gcc $^ -o ${target}

%.o:%.c
        gcc -c $< -o $@
  1. 有些系统变量可以赋值,比如CC(gcc), CPPFLAGS

Makefile(4)

  1. makefile提供一些函数供使用,格式:v_nane = $(funname param1, param2…)
target = app
src = $(wildcard ./*.c)
obj = $(patsubst %.c, %.o, $(src))

$(target):$(obj)
        gcc $^ -o $(target)

%.o:%.c
        gcc -c $< -o $@
  1. wildcard:得到一系列文件名
  2. patsubst:对文件名做一个替换

一般makefile中会有一个clean选项,表示删除之前make生成的文件,规则:新建一个目标,不加依赖,\n\t直接写clean命令, 如下:

target = app
src = $(wildcard ./*.c)
obj = $(patsubst %.c, %.o, $(src))

$(target):$(obj)
        gcc $^ -o $(target)

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

.PHONY:clean
clean:
        rm -f $(obj) $(target)
  1. 如果目录下有clean文件则不会执行clean命令,因为clean没有依赖,所以总认为clean没有update。声明.PHONY:clean表示伪目标,不会进行更新比较,每次都执行。
  2. 另外,在makefile中,如果有命令执行失败,是不会继续执行的,所以可以在命令前加上-, 表示如果执行失败,忽略掉该命令。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值