makefile快速入门

makefile和make命令一起配合使用,它常常被用来组织c/c++项目的编译。

    1,makefile就是一个文件,一般文件名用makefile或者Makefile.(不需要指定解释器,它不是shell)

    2,make和makefile,make不指定参数的情况下,默认编译makefile或者Makefile

    3,make后面指定参数-f来指定你的makefile的名字,个性化文件名。

    4,命令必须用tab键开头。

    5,makefile的编写围绕着两个部分:目标文件,依赖文件。

                目标文件:依赖文件

    6,用@符号将过程掩饰

    7,在makefile中只有单行注释,并且注释用#

    8,一个makefile中可以有多个目标。

    9,如果使用make时,不指定目标,它执行的永远是第一个目标make目标名。

一,makefile变量

    变量的定义和shell是一样的  OBJ=file.c

    引用方式 

    shell引用变量:$OBJ或者${OBJ}

    makefile引用变量: $(OBJ)

二,基本运算符

    = :基本赋值和 :=一样

    ?= :判断变量是否为第一次定义,如果是就赋值?=后面的值,如果不是,不会进行赋值。

     += :追加,追加是以一个变量内容,内容与内容之间用空格隔开

三,makefile自动推导规则

    显示规则:它说明了,如何生成一个或多个的目标文件。这是由makefile的书写者明显指出,要生成的文件,文件的依赖,生成的命令。

    隐晦规则:由于我们的make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写makefile,这是由make所支持的。

    自动变量:

        $@:目标集合

        $<:第一个依赖目标.如果依赖目标是多个,逐个表示依赖目标。

        $^:所有依赖目标的集合,去除重复依赖的目标。

        %:在makefile中%相当于命令里面的*,代表是匹配所有

    特殊变量:

        CC:代表的是编译器

    make

        -f:指定文件名

        -i:忽略错误,继续往后执行

        -j[N]:提高编译速度,make  -j8

        -C:改变工作目录之后去做一些事情

        -r :只证明推导规则的正确,不会编译文件

    export:关键字引出来(导出)

        export PATH=$PATH:/bin/root

四,makefile文件中路径设置(只是针对makefile文件本身自动推导 规则有效)

    路径设置关键字; vpath 和VPATH

    ar r $@ $^

五,makefile的引用

    include  路径+文件名

    如果引用的makefile文件中含有与调用引用的makefile中的目标相同的话,内容会被覆盖,调用的内容将不会显示。

实例:

sort : sort.o insert_sort.o
        g++ -o sort sort.o insert_sort.o

insert_sort.o : insert_sort.c insert_sort.h
        g++ -c insert_sort.c insert_sort.h
sort.o : sort.c
        g++ -c sort.c
clean :
        rm *.o
        rm sort

猜你喜欢

转载自blog.csdn.net/meiyoudao_jiushidao/article/details/71440887