web-dev-qa-db-ja.com

Makefile:設定されているがnull値を持つ変数のデフォルト値

変数が設定されていない場合、または設定されているがnull値がある場合に備えて、デフォルト値が必要な変数を持つMakefileがあります。

どうすればこれを達成できますか?

シェルスクリプト内でmakeを呼び出し、makefileで必要な値をシェルから$ 1として渡すことができるため、これが必要です。これをmakefileに渡すには、bashスクリプト内に設定する必要があります。


アイデア:(エレガントではありません)bashスクリプト内では、変数が設定されていてもnull値がある場合、変数をチェックできます。その場合、変数を設定解除できます。


切れ端

注:変数がbashスクリプトで設定されているため、変数がターミナルで定義されていない場合、以下は機能しません。

Makefile

dSourceP?=$(Shell pwd)
Source?=$(notdir $(wildcard $(dSourceP)/*.md))

バッシュスクリプト

make all dSourceP="${1}" Source="${2}"

ターミナル

bash ./MyScript.sh
bash ./MyScript.sh /home/nikhil/MyDocs
bash ./MyScript.sh /home/nikhil/MyDocs index.md
5
Nikhil

GNU makeを使用しているため、 the ?=演算子

FOO ?= bar

ただし、これは既存のnull(または、空の)値を処理しません。以下は、存在しない値と空の値を扱います。

ifndef FOO
override FOO = bar
endif

test:
    echo "$(FOO)"

.PHONY: test

(6行目が実際のタブで始まることを確認してください。)

あなたはこれを使って

make FOO=blah

値を設定します。 makeまたはmake FOO=FOObarに設定することになります。 overrideコマンドラインで設定された変数を上書きするには が必要です。

11
Stephen Kitt