Makefile シェルは sed 正規表現行の終わりを無視します。

Makefile シェルは sed 正規表現行の終わりを無視します。

*.c私の目標は、Makefileで.で終わるファイル名を検索し、その.cファイル名のルートをターゲットに追加することです。

Makefile:

TARGETS = $(shell ls *.c | sed "s/\.c$//g")
all: $(TARGETS)

問題は、シェルコマンドがshで期待どおりに機能することです。

$ sh -c 'ls *.c | sed "s/\.c$//g"'
hello

...次のように失敗してもmake

$ make
sed: 1: "s/\.c/g": unterminated substitute in regular expression
make: Nothing to be done for `all'.

脱出しようとしましたが、結果は次$のとおりです。\$

`sed: 1: "s/\.c\/g": unterminated substitute pattern`

"二重引用符()を一重引用符()に置き換える場合も同様です'

ベストアンサー1

あなたは脱出する必要があります$。をmake使用してこれを行うことができます$$。あなたの行は次のようになります:

TARGETS = $(shell ls *.c | sed "s/\.c$$//g")

これは質問に直接答えていますが、@casの解決策は良く見えます。

おすすめ記事