《跟我一起寫Makefile》學習筆記(一)

2021-09-11 00:17:03 字數 1419 閱讀 5700

鏈結(link):

file1.o,file2.o…----------->> file,鏈結器會在所有的object file中找尋函式的實現

2.makefile的規則

target ... : prerequisites ...

command

......

target(目標):檔案或標籤

prerequisites : 生產target需要的檔案

command:命令

這裡要說明一點的是,標籤(lable)不是乙個檔案,它只不過是乙個動作名字,有點像c語言中的lable一樣,其冒號後什麼也沒有,那麼,make就不會自動去找它的依賴性,也就不會自動執行其後所定義的命令。要執行其後的命令,就要在make命令後明顯得指出這個lable的名字。這樣的方法非常有用,我們可以在乙個makefile中定義不用的編譯或是和編譯無關的命令,比如程式的打包,程式的備份,等等。

3.make是如何工作的

1).make會在當前目錄下找名字叫「makefile」或「makefile」的檔案。

2).如果找到,它會找檔案中的第乙個目標檔案(target),在上面的例子中,他會找到「edit」這個檔案,並把這個檔案作為最終的目標檔案。

3).如果edit檔案不存在,或是edit所依賴的後面的 .o 檔案的檔案修改時間要比edit這個檔案新,那麼,他就會執行後面所定義的命令來生成edit這個檔案。

4).如果edit所依賴的.o檔案也不存在,那麼make會在當前檔案中找目標為.o檔案的依賴性,如果找到則再根據那乙個規則生成.o檔案。(這有點像乙個堆疊的過程)

5).當然,你的c檔案和**件是存在的啦,於是make會生成 .o 檔案,然後再用 .o 檔案生成make的終極任務,也就是執行檔案edit了。

4.makefile中使用變數

objects = main.o kbd.o command.o display.o \

insert.o search.o files.o utils.o

edit : $(objects)

cc -o edit $(objects)

....

5.讓make自動推導

main.o : main.c defs.h

cc -c main.c

可以簡化成

main.o : defs.h
6.引用其它的makefile

include關鍵字可以把別的makefile包含進來,被包含的檔案會原模原樣的放在當前檔案的包含位置,如:

include ;

-include ;
-符號表示,無論include過程**現什麼錯誤,都不要報錯繼續執行

跟我一起寫 Makefile

概述 什麼是makefile?或許很多winodws的程式設計師都不知道這個東西,因為那些windows的ide都為你做了這個工作,但我覺得要作乙個好的和professional的程式設計師,makefile還是要懂。這就好像現在有這麼多的html的編輯器,但如果你想成為乙個專業人士,你還是要了解h...

跟我一起寫 Makefile

概述 什麼是makefile?或許很多winodws的程式設計師都不知道這個東西,因為那些windows的ide都為你做了這個工作,但我覺得要作乙個好的和professional的程式設計師,makefile還是要懂。這就好像現在有這麼多的html的編輯器,但如果你想成為乙個專業人士,你還是要了解h...

跟我一起寫 Makefile

跟我一起寫 makefile 陳皓 概述 什麼是makefile?或許很多winodws的程式設計師都不知道這個東西,因為那些windows的ide都為你做了這個工作,但我覺得要作乙個好的和professional的程式設計師,makefile還是要懂。這就好像現在有這麼多的html的編輯器,但如果...