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)
 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM