
*.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の解決策は良く見えます。
答え2
GNU Makeの使用:
objects := $(patsubst %.c,%.o,$(wildcard *.c))
all : $(objects)
詳細については、info make
またはpinfo make
検索wildcard
と機能を参照してください。ディストリビューションによって文書全体を入手するには、まずパッケージ(または同様のもの)をインストールするpatsubst
必要があります。make-doc
make