Makefileの関数が条件を無視して予期せず実行されるように見える場合

Makefileの関数が条件を無視して予期せず実行されるように見える場合

これは簡単な方法ですが、好きなようには機能しません。

$(eval PkgName := $(shell pacman -Qq zsh | awk '{print $$1}'))

$(if ifeq ($(strip ${PkgName}),), pacman -Sy --noconfirm zsh)

私が望むのは、以前にインストールされていなかったパッケージをインストールすることだけです。システムにパッケージがない場合、インストールは正常に実行されます。ただし、インストールされていても実行されます。

私は同じ結果でGNU make条件付きifeqを試しました。

パッケージがシステムにすでに存在する場合、パッケージが実行されないようにする方法は?

答え1

次のように書くことができます。

$(eval PkgName := $(shell pacman -Qq zsh | awk '{print $$1}'))

$(if ${PkgName},,pacman -Sy --noconfirm zsh)

これにより、エラーなしですべての操作が実行されます。

もう一度ありがとうございます。これが将来的に誰かに役立つことを願っています。

答え2

$(if cond,true_path,false_path)make と条件を混同していますifeq

ユースケースに応じて make 変数を定義$(STATUS)し、if ステートメントに install がないことを確認できます。

STATUS := $(if $(strip $(shell pacman -Qq zsh | awk '{print $$1}')),,$(strip $(shell pacman -Sy --noconfirm zsh)))

関連情報