Make

Makefile 中的一行條件檢查

  • July 5, 2017

我正在嘗試實現這樣的目標:如果使用者將執行make build_x version=1.0然後顯示Building version 1.0,否則(make build_x不帶version參數)顯示Building version latest。但是這裡的關鍵是什麼 - 我需要將版本設置-為預設值(以便能夠正確使用它git)。這就是為什麼我使用附加變數version_info替換-latest.

所以我的程式碼如下所示:

build_x:
   $(eval version ?= -)        
   $(eval version_info = ${if ["${version}" == "-"], "latest", "${version}"})

   ${INFO} "Doing checkout according to version $(version_info)..."

我知道問題可能出在這個條件給if.

有任何想法嗎?

這對我有用:

version ?= -
ifeq (-,$(version))
 version_info = latest
else
 version_info = $(version)
endif

build_x:
   @echo version_info = $(version_info)

如果未設置,則設置version為,然後適當地-填寫。version_info

使用特定於目標的變數和單行變體:

build_x: version ?= -
build_x: version_info = $(if $(version:-=),$(version),latest)
build_x:
   @echo version_info = $(version_info)

其工作方式如下(參見整體GNU Make 文件):

  • version ?= - version-如果尚未設置則設置為
  • if 檢查它的第一個參數,評估它是否為空,如果第一個非空則替換為第二個參數,如果是第三個則替換
  • $(version:-=)評估version-空字元串替換(:引入替換,搜尋鍵是之前的文本=,替換是之後的文本=

引用自:https://unix.stackexchange.com/questions/375405