天天看點

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的引用

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      

繼續閱讀