Linux下Makefile的作用是使用8086編譯器將bootsect.s和setup.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源代碼的概貌。