0

$@,$^自動変数 ( ) とパターン ( )を使用して次の makefile を%作成しましたが、gnu make では機能しません。

TARGET = edit
SRCS = $(wildcard *.c)
OBJS = $(SRCS:%.c=%.o)
$(TARGET) : $(OBJS)
    gcc $^ -o $(TARGET)
%.o : %.c
    gcc $< -c $@

作業ディレクトリに foo.c 、bar.c があります。エラーは次のとおりです。

gcc foo.c -c foo.o
gcc: foo.o: No such file or directory
make: *** [foo.o] Error 1

私は と でとても混乱しautomatic variablesますpattern rules。それらを正確に使用するにはどうすればよいですか? そして、彼らは何か関係がありますか?

4

2 に答える 2

1

あなたのルールは間違っています。そのはず:

%.o : %.c
    gcc -c $< -o $@
于 2013-04-06T08:20:05.127 に答える
0

専門家でない場合、これらすべての記号を使用した従来の makefile 構文は混乱します。makepp では、自己説明的な長い名前を使用できます (2 行目はタブで始める必要はありません)。

%.o : %.c
    gcc -c $(input) -o $(ouptut)

あなたの質問について: これらの変数は、冗長性を避けるためにすべてのルールで役立ちますが、パターン ルールでは不可欠です。多くの入力ファイルのどれが現在コンパイルされているかを他にどのように知ることができますか。

makeppには他にもたくさんあります。GNU make でできることのほとんどすべてを実行する以外に、もっと便利なことがたくさんあります。また、Perl プログラミングを使用して makefile を拡張することもできます。

于 2013-04-07T12:02:42.783 に答える