解析Linux的MakeFile

 

Linux下Makefile的作用是使用8086編譯器將bootsect.ssetup.s分別編譯成各自執行的模塊,使用gcc編譯其它linux文件,生成模塊system,最後使用tools目錄下的build工具,將三者組合成一個可執行的映像image

makefile文件當中:

.ROOT_DEV=dev/hd6指的是創建內核鏡像時,所使用的默認文件系統所在的設備。

.爲什麼要使用.a.lib文件?

      在大多數時候,由於源文件太多,編譯生成的中間目標文件太多,而在鏈接時需要明顯地指出中間目標文件名,這對於編譯很不方便,所以,我們要給中間目標文件打個包,在Windows下這種包叫庫文件Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件。

.解釋下面這段代碼的含義?

dep

sed '//#/#/# Dependencies/q' < Makefile > tmp_make

//如果是一個比較大型的工程,你必需清楚哪些C文件包含了哪些頭文件,並且,你在加入或刪除頭文件時,也需要小心地修改Makefile,這是一個很沒有維護性的工作。爲了避免這種繁重而又容易出錯的事情,我們可以使用C/C++編譯的一個功能。大多數的C/C++編譯器都支持一個-M的選項,即自動找尋源文件中包含的頭文件,並生成一個依賴關係。

(for i in init/*.c;do echo -n "init/";$(CPP) -M $$i;done) >> tmp_make

cp tmp_make Makefile

(cd fs; make dep)

 (cd kernel; make dep)

(cd mm; make dep)

 

### Dependencies:

init/main.o : init/main.c include/unistd.h include/sys/stat.h /

include/sys/types.h include/sys/times.h include/sys/utsname.h /

include/utime.h include/time.h include/linux/tty.h include/termios.h /

include/linux/sched.h include/linux/head.h include/linux/fs.h /

include/linux/mm.h include/signal.h include/asm/system.h include/asm/io.h /

include/stddef.h include/stdarg.h include/fcntl.h

通過這個makefile文件,可以看到linux 0.11源代碼的概貌。

 

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