を使用して変数が定義されているかどうかを確認しようとしていますが、実行時にエラーが発生しifndef/ifdef
続けます。not found
私は を使用しGNU Make 3.81
ています。ここに私が持っているもののスニペットがあります:
all: _images
$(call clean, .)
$(call compile, .)
@$(OPENER) *.pdf &
_images:
$(call clean, "images")
$(call compile, "images")
define clean
@rm -f ${1}/*.log ${1}/*.aux ${1}/*.pdf
endef
define compile
ifdef ${1}
dir = ${1}
else
dir = .
endif
ifdef ${2}
outdir = ${2}
else
outdir = ${1}
endif
@$(COMPILER) -output-directory ${outdir} ${dir}/*.tex
endef
そして正確なエラー:
$ make
ifdef "images"
/bin/sh: 1: ifdef: not found
make: *** [_images] Error 127
編集:
Barmar のコメントを考慮すると、結論は次のようになります。
define の内容はシェル コマンド ラインであり、make ディレクティブではありません。定義ブロック内のコマンド内で改行するには、改行をエスケープする必要があります -- \; また、ワンライナー コマンドに対応する各ブロックは、それぞれが異なるシェル実行で個別に実行されます。つまり、次のワンライナー ブロックの変数値にアクセスすることを意図している場合、ローカル変数の定義は機能しません。
素敵な作業をしてくれたトリプルに感謝します。