一個makefile中引用另外一個makefile,其寫法與C語言include 相似。 make 命令開始時,會搜尋 include 所包含的其它 Makefile,並把其內容安置在當前的位置。bash
使用隱晦規則來書寫makefileui
include Makefile.hello
run: main.o hello.o test.o
gcc -o run main.o hello.o test.o
.PHONY: clean
clean:
-rm run *.o
複製代碼
Makefile.hellospa
hello.o: hello.c
gcc -c hello.c
複製代碼
運行結果:code
root@chenwr-pc:/home/workspace/my_workspace/study/makefile# make run
cc -c -o main.o main.c
gcc -c hello.c
cc -c -o test.o test.c
gcc -o run main.o hello.o test.o
複製代碼
Makefile文件可使用其餘命名來區分,如Makefile.hello,若是要單獨執行Makefile.hello,只須要make -f Makefile.hello 或者 make --file Makefile.hellocdn
include 其餘makefile可包含路徑,若是沒有路徑。blog
若是找不到該文件,報錯。get
root@chenwr-pc:/home/workspace/my_workspace/study/makefile# make run
Makefile:1: Makefile.hello: No such file or directory
make: *** No rule to make target `Makefile.hello'. Stop. 複製代碼
若是打算沒法找到Makefile.hello文件也要進行執行下去,只需在include前加個減號string
-include Makefile.hello
複製代碼
make會繼續執行下去。it
書中提到:可是在這裏我仍是建議不要使用這個環境變量,由於只要這個變量一被定義,那麼當你使用 make 時,全部的 Makefile 都會受到它的影響,這毫不是你想看到的。在這裏提這個事,只是爲了告訴你們,也許有時候你的 Makefile 出現了怪事,那麼你能夠看看當前環境中有沒有定義這個變量。io
環境變量和自定義變量 -》相似於「全局變量」和「局部變量」 建立個環境變量CWR
export CWR=666
複製代碼
經過env來查看全部環境變量
cwr:
@echo $(CWR)
複製代碼
@ 做用關閉命令回顯 運行結果:
root@chenwr-pc:/home/workspace/my_workspace/study/makefile# make cwr
666
複製代碼
在Makefile中定義該變量
CWR = 233
cwr:
@echo $(CWR)
複製代碼
運行結果:
root@chenwr-pc:/home/workspace/my_workspace/study/makefile# make cwr
233
複製代碼
系統環境變量值被覆蓋。 書中反覆強調:不推薦把許多的變量都定義在系統環境中,這樣,在咱們執行不用的Makefile 時,擁有的是同一套系統變量,這可能會帶來更多的麻煩。
不過我看不少廠商在編譯系統鏡像前,都會先source 一下廠商寫的環境變量腳本。估計也是爲了讓每一個模塊共通的部分集中在環境變量中,使得模塊的Makefile看起來更簡潔更容易閱讀。