初學make與makefile

很久之前認識過make,聽說很強大的一個功能,但沒有充分認識到,知道今天。
下面的實驗都是在ubuntu16.04下進行

認識make和makefile

makefile是一種編譯腳本,make是解釋makefile的命令

makefile編寫規則

目標文件:[相依文件…]
命令1[#註釋]

命令n[#註釋]

實例

# cc默認爲gcc
objects = main.o readfile.o writefile.o
edit : $(objects)
    cc -o edit $(objects)
main.o : main.c readfile.h writefile.h
    cc -c main.c
readfile.o : readfile.c readfile.h
    cc -c readfile.c
writefile.o : writefile.c writefile.h
    cc -c writefile.c
clean :
    rm edit $(objects)

上面的腳本,我們可以放在名爲makefile或Makefile文件中,在該目錄下輸入make命令,就可以生成所有的目標文件。
這裏寫圖片描述

最後要說明一點是clean只不過是一個動作的名字,其冒號後面什麼都沒有,那麼make就不會主動去找文件的依賴性,就不會執行其後所定義的命令。如上,rm edit $(objects) 命令是不會被執行的。當我們需要執行此命令去刪除所有生成的目標文件時,可以在此目錄下輸入make clean,以便重新編譯

這裏寫圖片描述

運行機制大概描述

  1. make會在當前目錄下找名爲makefile或Makefile文件
  2. 若找到,則會將第一個目標文件當作最終爲目標文件
  3. 若當前目錄下edit文件不存在,或edit冒號後的依賴文件修改時間要比edit新,則會執行命令生成新的edit
    這裏寫圖片描述
    這裏寫圖片描述
  4. 當然所有相關的.c和.h文件是必須存在的,否則會報如下錯誤
    這裏寫圖片描述

實例源代碼:
鏈接: https://pan.baidu.com/s/1qYAsJpE 密碼: ijv7

參考:
跟我一起寫Makefile-陳皓

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章