很久之前認識過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,以便重新編譯
運行機制大概描述
- make會在當前目錄下找名爲makefile或Makefile文件
- 若找到,則會將第一個目標文件當作最終爲目標文件
- 若當前目錄下edit文件不存在,或edit冒號後的依賴文件修改時間要比edit新,則會執行命令生成新的edit
- 當然所有相關的.c和.h文件是必須存在的,否則會報如下錯誤
實例源代碼:
鏈接: https://pan.baidu.com/s/1qYAsJpE 密碼: ijv7
參考:
跟我一起寫Makefile-陳皓