1. ホーム
  2. makefile

[解決済み] Makefile の変数が空の場合、条件付きで何かに設定するにはどうすればよいですか?

2023-04-30 12:36:53

質問

変数が空の場合に設定したい。このように試してみました。

....
TEST := $(something)
...
TEST ?= $(something else)

最初の $(something) は空の文字列を返すかもしれませんが、条件付き代入 ?= は空の場合ではなく、前の変数が設定されていない場合にのみ働きます。

空の場合に変数を設定するための任意のエレガントなソリューションですか?


EDIT この解決策を見つけました。

....
TEST := $(something)
...
TEST += $(something else)
TEST := $(word 1, $(TEST))

が、もう一つエレガントなものが出てくると思います。

どのように解決するのですか?

<ブロッククオート

空の場合、変数を設定するための任意のエレガントなソリューション?

GNU makeはエレガントな解決策ではほとんど知られていません。罠や地雷原をエレガントだと感じるのであれば話は別ですが。私は、あなたが望むことを達成するための2つの方法しか知りません。

  1. 標準的な ifeq / endif の解決策になります。

    ifeq ($(TEST),)
    TEST := $(something else)
    endif
    
    
  2. を使用します。 $(if) 関数を使用します。

    TEST := $(if $(TEST),$(TEST),$(something else))
    
    

    この構成を関数にパッケージ化することもできますが、それはお勧めできません。この関数には、時々 $(something else) を含む場合 , (を含んでいる場合(これには回避策しかない)。(のような組み込み関数は $(if) には免疫があります。 , バグの影響を受けません)。

エレガンステストはあなた次第です。