2016-11-10 22 views
1

foo.c,bar.cおよびMakefileを含むディレクトリがあるとします。 Makefileの内容は次のとおりです。Makeでループ内のファイル名拡張子を削除するにはどうすればよいですか?

loop: 
    @for f in $(wildcard *.c) ; do \ 
     echo $$f ; \ 
     echo $(basename $$f); \ 
    done 

次のテキストからmakeプリントを実行している:私が欲しいもの

bar.c 
bar.c 
foo.c 
foo.c 

は次のとおりです。

bar.c 
bar 
foo.c 
foo 

だから、basenameが、この中には効果がありませんようですループ。 basenameを動作させるにはどうすればよいですか?

答えて

3

ループが機能していませんbashループです。あなたはに似た振る舞いをしたい場合は eezeを作り、あなたが

loop: 
    $(foreach f, $(wildcard *.c), \ 
    echo $f; \ 
    echo $(basename $f);) 

あるいは

loop: 
    $(foreach f, $(wildcard *.c), \ 
    $(info $f) \ 
    $(info $(basename $f))) 

を持つことができるプレフィックスを除去するためにのbashイーズの方法は次のとおりです。

loop: 
    @for f in $(wildcard *.c) ; do \ 
     echo $$f ; \ 
     echo $${f%.c} ; \ 
    done 
+0

最初のコードスニペットは '@echo:not found'というエラーを返します。 '@'が削除された場合、エラーはなくなります。 –

+0

あなたは正しいです、私はanswwerを修正しました –

関連する問題