有些軟體的版本號後面會有個 build number。這個是自動產生的,讓大家可以明確的知道自己產生的程式是哪版的。因為有時為了版本控制,不會每一次都在正式的版號上加一,但是又需要區分程式的差異,所以想出了這個方法。
這個方法,雖然早就知道,但從來沒自己實做過。現在真的要自己做了,一開始還真沒有頭緒。經過自己想想,加上參考手上的程式碼裡本來的版本資訊的內容(本來是用 build date)。想得到的大概就是產生一個檔來存放 build number ,然後在 make 時,去把檔案內容讀出來 + 1,然後也把這個 + 1 的值存回去。
不過 Makefile 到用時恨少,實在不太會寫,試了半天語法都不對…0rz,沒辦法只好求助 google 大神了。
基本上是這樣子:
$(VERSION_FILE):
@if ! test -f $(BUILD_FILE); then echo 0 > $(BUILD_FILE); fi
@echo $$(($$(cat $(BUILD_FILE)) + 1)) > $(BUILD_FILE)
@( printf '#define U_BOOT_VERSION "U-Boot %s %s BSP Version:%s"\n' \
"$(U_BOOT_VERSION)" "$(U_BOOT_VER)" "$(BSP_VERSION)") > $@.tmp
@( printf '#define U_BOOT_VER "%s"\n' \
"$(U_BOOT_VER)") >> $@.tmp
@( printf '#define CC_VERSION_STRING "%s"\n' \
'$(shell $(CC) --version | head -n 1)' )>> $@.tmp
@( printf '#define LD_VERSION_STRING "%s"\n' \
'$(shell $(LD) -v | head -n 1)' )>> $@.tmp
@echo "#define U_BOOT_BUILD \"$$(cat $(BUILD_FILE))\"" >> $@.tmp
@cmp -s $@ $@.tmp && rm -f $@.tmp || mv -f $@.tmp $@
重點就這三行(Makefile語法還太弱,只好照抄,跟本來的格式都不一樣)
@if ! test -f $(BUILD_FILE); then echo 0 > $(BUILD_FILE); fi
# 如果檔案不存在就建一個
@echo $$(($$(cat $(BUILD_FILE)) + 1)) > $(BUILD_FILE)
# 用 cat 把值讀出來+1 再寫回去
@echo "#define U_BOOT_BUILD \"$$(cat $(BUILD_FILE))\"" >> $@.tmp
# 把 build number 寫進 $(VERSION_FILE).tmp 裡
沒有留言:
張貼留言