2014年8月29日 星期五

How to add auto increased build number

有些軟體的版本號後面會有個 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 裡

沒有留言:

張貼留言