私のビルドファイル:
FULL_VERSION ?= 1.2.3
MINOR_VERSION := $(shell echo "${FULL_VERSION%.*}")
test:
echo $(MINOR_VERSION)
私は走ってmake test
何も得られず、それを望んでいます1.2
。
sed / grepを介して取得できることを知っていますが、よりエレガントなソリューションを探しており、bashパラメータ拡張よりも単純なものはありません。
ベストアンサー1
まず、シェル変数に値を保存する必要があります。
MINOR_VERSION := $(shell v='$(FULL_VERSION)'; echo "$${v%.*}")
($(FULL_VERSION)
一重引用符が含まれていないと仮定)
これで電話をかけてもsh
機能しませんbash
。${var%pattern}
は標準sh
演算子です(からksh
)。
特定の代理人を使用するには、withの代わりに電話をbash
知らせる必要があります。make
bash
sh
SHELL = bash
ただし、多くのシステムにはデフォルトでMakefileがインストールされていないため、bash
Makefileを移植できなくなります(ただし、一部のシステムにはGNUがなく、make
すでにいくつかのGNUismを使用しています)。