Makefileで1行の条件を確認する

Makefileで1行の条件を確認する

私は次のことを達成しようとしています。ユーザーが実行されている場合は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

どんなアイデアがありますか?

答え1

これは私にとって効果的です。

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

build_x:
    @echo version_info = $(version_info)

設定されていない場合versionに設定され-、適切に入力されますversion_info

ターゲット固有の変数と1行のバリアントを使用します。

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

次のように動作します(全体を参照)。GNUドキュメントの作成):

  • version ?= - セットversion-まだ設定していない場合
  • if 最初のパラメータを確認してください。、空であるかどうかを評価し、最初の引数が空でない場合は2番目の引数に置き換え、空の場合は3番目の引数に置き換えます。
  • $(version:-=)評価するversion変える-空の文字列を使用する(:置換の導入、検索キーは前のテキスト、置換=は次のテキストです=

答え2

ここでは、ターゲット固有の変数値機能を最大限に活用できます。

build_x: version := latest
build_x:
     @echo "Building version $(version)"

関連情報