makefile基本命令

makefile
    好处  :
        方便整个项目的管理
    1.make
        gcc - 编译器 按照某种规则去编译代码
        make - linux自带的构建器
            构建的规则在makefile中    
    2. makefile文件的命名
        - makefile
        - Makefile
    3.makefile中的规则
        gcc a.c b.c c.c -o app
            - 三部分: 目标,依赖,命令
                目标 app    
                依赖 a.c b.c c.c
                命令 gcc a.c b.c c.c -o app
 
                目标:依赖
                (tab缩进)  命令
                app:a.c b.c c.c
                    gcc a.c b.c c.c -o app
                
    4.makefile的编写
    第一个版本
缺点:    
效率低,修改一个文件,所有文件会被全部重新编译
 
    第二个版本
    工作原理
        依赖不存在
            向下搜索子规则,如果有规则用来生成查找的依赖的,执行规则中的命令
        依赖存在,判断是否需要更新
            原则:目标时间>依赖的时间
                反之:则更新
    
        缺点:冗余
 
    第三个版本
        -自定义变量:  
            obj=a.o b.o c.o    (obj 变量名,可自行定义)
            obj=10
            变量的取值:    aa=$(obj)
        -makefile 自带的变量: 大写(格式都是大写)
            CPPFLAGS        (指定头文件)
            CC                    
        -自动变量
            $@ : 规则中的目标
            $<  : 规则中的第一个依赖
            $^  : 规则中所有的依赖
            自动变量 只能在规则的命令中使用
            
    模式匹配:
    %.o:%.c
    第一次:framwork.o没有
        main.o:main.c
            gcc -c main.c -o main.o
    第二次: add.o
        add.o:add.c
            gcc -c add.c -o add.o
    缺点: 可移植性比较差
 
第四个版本
    *makefile所有的函数都有返回值
    *查找指定目录下指定类型的文件
        src = $(wildcard  ./*.c)   
    *匹配替换
        obj = $(patsubst %.c, %.o, $(src))
缺点:不能清理项目
 
第五个版本
    让make生成不是终极目标的目标
        make 目标名
 
    编写一个清理项目的规则
    clean:
        rm *.o app
    
        -(符号) 作用:忽略执行失败的命令,让程序继续向下执行。
当前语句执行失败后, 继续向下执行
        - rm $(obj) $(out) -f
    
    声明伪目标        跳过判断环节,直接执行
        .PHONY: 生成的伪目标名
        .PHONY: clean
        -f 强制执行
        命令前加 -
            忽略执行失败的命令,继续执行
 
.PHONY: clean
clean:
    -rm -f $(obj) $(out)
 

猜你喜欢

转载自www.cnblogs.com/period/p/12152213.html