父makefile呼叫子makefile和 objs用法
阿新 • • 發佈:2019-01-29
一、呼叫子目錄Makefile
Makefile只負責編譯當前目錄中的物件。
子目錄中的物件,由子目錄中的Makefile負責。
如何讓make呼叫子目錄中的Makefile?答案是把子目錄包含到obj-y或obj-m中。
例如:
#fs/Makefile
obj-$(CONFIG_EXT2_FS) += ext2/
當CONFIG_EXT2_FS為y或m時,kbuild系統會在ext2目錄中呼叫make命令(也即呼叫ext2目錄中的Makefile)
2.2 lib-y和lib-m
在一個目錄下,obj-y所列出的檔案,將被編譯成built-in.o檔案,而lib-y或lib-m所列出的檔案,將在當前目錄下生成lib.a檔案。
注意:一般lib-y或lib-m只用在lib/和arch/*/lib這兩個目錄中。
obj-y 是編譯到核心,obj-m是編譯成模組,obj-$是什麼?
$(CONFIG_TEST) 是一個整體,$(xxx)表示引用變數 xxx
比如定義 CONFIG_TEST=y
$(CONFIG_TEST)就是y
obj-$(CONFIG_TEST) 就是 obj-y
又比如定義 CONFIG_TEST=m
$(CONFIG_TEST)就是m
Makefile只負責編譯當前目錄中的物件。
子目錄中的物件,由子目錄中的Makefile負責。
如何讓make呼叫子目錄中的Makefile?答案是把子目錄包含到obj-y或obj-m中。
例如:
#fs/Makefile
obj-$(CONFIG_EXT2_FS) += ext2/
當CONFIG_EXT2_FS為y或m時,kbuild系統會在ext2目錄中呼叫make命令(也即呼叫ext2目錄中的Makefile)
2.2 lib-y和lib-m
在一個目錄下,obj-y所列出的檔案,將被編譯成built-in.o檔案,而lib-y或lib-m所列出的檔案,將在當前目錄下生成lib.a檔案。
注意:一般lib-y或lib-m只用在lib/和arch/*/lib這兩個目錄中。
obj-y 是編譯到核心,obj-m是編譯成模組,obj-$是什麼?
$(CONFIG_TEST) 是一個整體,$(xxx)表示引用變數 xxx
比如定義 CONFIG_TEST=y
$(CONFIG_TEST)就是y
obj-$(CONFIG_TEST) 就是 obj-y
又比如定義 CONFIG_TEST=m
$(CONFIG_TEST)就是m
obj-$(CONFIG_TEST) 就是 obj-m
二、
2.objs用法
obj-y = main.o
main-objs := a.o \ b.o \ c.o
將a.c b.c c.c三個檔案編譯後連結生成main.o