web-dev-qa-db-ja.com

Makefileのデータを適切にエスケープするにはどうすればよいですか?

Makefileで使用されるbashスクリプトでconfig.mkを動的に生成しています。ファイルは以下で構成されます:

cat > config.mk <<CFG
SOMEVAR := $value_from_bash1
ANOTHER := $value_from_bash2
CFG

生成されたファイルに$value_from_bash*の内容が含まれ、展開/解釈されたものではないことを確認するにはどうすればよいですか?おそらく$$$に、\\\にエスケープする必要がありますが、エスケープする必要がある他の文字はありますか?おそらく私が聞いたことがない特別な文字通りの割り当てがありますか?

スペースも面倒なようです:

$ ls -1
a b
a
$ cat Makefile
f := a b
default_target:
    echo "$(firstword $(wildcard ${f}))"
$ make
a

f := a\ bを使用すると機能します(f := 'a b'などの引用符を使用しても機能しませんでした。makefileはそれを通常の文字として扱います)

37
Lekensteyn
  1. あなたが言うように、そのメイクファイルがどのように機能するかはわかりません。パターンルールをデフォルトにすることはできません。
  2. `$(wildcard ...)`に `$`がないため、実際にテストしているものを投稿していないと思います。
  3. 改行もエスケープする必要があります。
2
Beta