Makefileで「すべての前提条件」変数をエスケープします。

Makefileで「すべての前提条件」変数をエスケープします。

シェルで使用するときに名前を引用する必要がある複数のファイルがあるとします。

echo A > 'a.$A'
echo B > 'b.$B'

そして、ルールが次のファイルに依存するMakefileがあります。

all: a.$$A b.$$B
    cat $+

上記のコードは単純な名前のファイルに対しては機能しますが、生成された例のファイルに対しては機能します。

cat a.$A b.$B
cat: a.: No such file or directory
cat: b.: No such file or directory

$Aシェルがand$B式を空の文字列に拡張するようです。

変数をとして参照すると、拡張はブロックされますが、cat '$+'すべての前提条件は単一の引数として渡されます。

cat 'a.$A b.$B'
cat: 'a.$A b.$B': No such file or directory

実際によれば文書:

すべての前提条件の名前[...]の間にスペースがあります。

問題は、すべての前提条件を参照できるように別々のパラメータにインポートする方法があるかどうかです。

ベストアンサー1

$+GNU Makeを使用すると、パターン置換を使用して各単語を一重引用符で囲むことができます。

all: a.$$A b.$$B
        cat $(patsubst %,'%',$+)

これは空白を含む前提条件では機能しませんが、Makeはとにかくこれを実際に処理できません。

おすすめ記事