简单makefile的编写



makefile是一个项目的 代码管理工具。

1 makefile的规则:

    规则中的三要素: 目标, 依赖, 命令
     目标:依赖条件
     (tab)命令  注:前面必须要有一个tab键缩进

    子目标和终极目标的关系:

最简单的一个makefile示例.注:终极目标一定要写在第一行,该示例的终极目标是生成myapp.
     myapp:main.c memcpy.c
          gcc main.c memcpy.c -o myapp

    更新目标的原则:改成一下的写法,当更新其中某个文件时,编译只会编译这一个文件。
     myapp:main.o memcpy.o
          gcc main.o memcpy.o -o myapp
     main.o:main.c
          gcc -c main.c
     memcpy.o:memcpy.c
          gcc -c memcpy.c

    改进版:
    myapp:main.o memcpy.o
     gcc main.o memcpy.o -o myapp 
     
    %.o:%.c
     gcc -c $< -o $@
     
    注释:当执行第一行命令时,发现没有main.o,会往下查找,找到“%.o:%.c”自动匹配成“main.o:main.c”。 

    gcc -c $< -o $@ 变成 gcc -c main.c  -o main.o

2. makefile的两个函数,makefile中所有的函数都是有返回值的。

    1  wildcard  参数直接写到函数名的后面,注意要加个空格
    
    2  patsubst ,匹配替换

     #obj=memcpy.o
     tgt=myapp
     
        src=$(wildcard /目录/*.c)  #wildcard有返回值,获取用$,注意这里用的是*
        obj=$(patsubst /目录/%.c, /目录/%.o,$(src))#把所有的.c文件替换成.o文件,注意这里用的是%
     
     $(tgt):$(obj)
           gcc $(obj) -o $(tgt)

     %.o:%.c
          gcc -c $< -o $@
       
     #添加伪目标
     .PHONY :clean    #声明clean为伪目标
     clean:
           -rm $(tgt) $(obj) -f # 参数-f,强制执行。在rm前加-.表示如果当前命令执行失败,则向下继续执行。否则会停止。

  3. makefile的三个自动变量,只能在规则中的命令行使用。
    $<  :规则中的第一个依赖。
    $^ :规则中的所有依赖
    $@  :规则中的目标

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值