鏈結(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的編輯器,但如果...