資料夾結構
名稱(Name) | 描述(Descript) |
~/build/ | 編譯空間 |
~/defconfig/ | 放置 defconfig 的地方 |
~/host-tools/ | 集中放置 host 工具的地方,可再擴充,像是 toolchain |
~/host-tools/menuconfig/ | standalong 的原始碼,內層不再贅述 |
~/host-tools/menuconfig/Makefile
原始的專案採用 cmake,因為會產生 cmake 相關的檔案,所以自己建一個簡單的 Makefile 來用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | CC ?= gcc lxdialog := lxdialog/checklist.o lxdialog += lxdialog/util.o lxdialog += lxdialog/inputbox.o lxdialog += lxdialog/textbox.o lxdialog += lxdialog/yesno.o lxdialog += lxdialog/menubox.o mconf-objs := mconf.o mconf-objs += zconf.tab.o mconf-objs += $(lxdialog) conf-objs := conf.o conf-objs += zconf.tab.o clean-files := mconf conf clean-files += $(mconf-objs) clean-files += $(conf-objs) all: mconf conf $(obj)/%.o: %.c $(CC) -c $< -o $@ mconf: $(mconf-objs) $(CC) $(mconf-objs) -o mconf -lncurses conf: $(conf-objs) $(CC) $(conf-objs) -o conf clean: @rm -f $(clean-files) |
make 完成後會產生 mconf 和 conf 兩個執行檔
~/Makefile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
ifneq ("$(wildcard .config)","") include .config endif all: preconfig preconfig: ifeq ("$(wildcard .config)","") $(error "Please run make menuconfig first.") endif menuconfig: @mkdir -p build @rsync -ur host-tools/menuconfig build @make -C build/menuconfig @./build/menuconfig/mconf Config.in list-defconfigs: @echo 'Built-in configs:' @$(foreach b, $(sort $(notdir $(wildcard defconfig/*_defconfig))), \ printf " %-35s - Build for %s\\n" $(b) $(b:_defconfig=);) @echo %_defconfig: @./build/menuconfig/conf --defconfig=defconfig/$@ Config.in~ |
5: all 之前要先跑過 preconfig
7~10: preconfig 會檢查 .config 是不是存在,如果不存在就顯示要求執行 menuconfig 並且報錯跳出
12~16: menuconfig 主體,make 的機制是已經編譯過且沒有更改內容,就不會重新編譯
18~22: list-defconfigs 可以列出在 ~/defconfig 裡面的所有 *_defconfig
24~25: 當執行 make xxxx_defconfig 就會依據 xxxx_defconfig 來產生 .config
使用這個 template 可以建立一個基本的 menuconfig 功能,通常會根據不同的 target board 或是個別的客製化來製作 xxxx_defconfig,要編譯的時候就可以直接 make xxxx_defconfig 然後再 make all。
一般來說,build 放置的是 target 的編譯空間,砍掉 build 就會非常乾淨,但是 host-tools 也得重編,所以如果確定 host-tools 跟 target 無依存關係,也可以另外開 host-build 來用。
沒有留言:
張貼留言