2017-08-29 8 views
0

私はこれらのファイルを持っていますmain.cfun.c、およびfun.hです。私はmakefileスクリプトを使用して、従来のコンパイル方法の代わりに実行したい。次のmakefileスクリプトを投稿した人は、このスクリプトが自動的に同じディレクトリにファイル名をキャプチャするので、プロジェクトディレクトリに移動して$ makeという端末に書き込むだけでよいことになります。しかし、私はこのエラーを取得するMakefileスクリプトが正しく実行されない

TARGET = prog 
LIBS = -lm 
CC = gcc 
CFLAGS = -g -Wall 

.PHONY: default all clean 

default: $(TARGET) 
all: default 

OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c)) 
HEADERS = $(wildcard *.h) 

%.o: %.c $(HEADERS) 
    $(CC) $(CFLAGS) -c $< -o [email protected] 

.PRECIOUS: $(TARGET) $(OBJECTS) 

$(TARGET): $(OBJECTS) 
    $(CC) $(OBJECTS) -Wall $(LIBS) -o [email protected] 

clean: 
    -rm -f *.o 
    -rm -f $(TARGET) 

make: *** No rule to make targetデフォルトの」私は、ファイルmakefileを作成し、次のスクリプトを置きます。 Stop.`

私は$make -vを試してみましたが、得た:

GNU Make 3.81 
Copyright (C) 2006 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. 
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A 
PARTICULAR PURPOSE. 

This program built for i386-apple-darwin11.3.0 

は、私は彼を誤解だと思います!親切に、ここには何が欠けていますか?ありがとうございました

+0

メイクファイルは** **スクリプトではありません。**私はそれらを使用することを考えています**伝統的ですが( '* .c'という名前のものをコンパイルするあなたのアプローチは間違いなく伝統的ではありません...) –

+0

あなたの 'default'ターゲットbtwは、このMakefile内では全く目的を果たしません。最初のルールとして 'all:$(TARGET)'を書くのはなぜですか? –

+2

Makefileでは、それらの空白(4つの空白が順番に並んでいます)がタブ付きでなければならないことを覚えています( '\ t')。 – Amadeus

答えて

2

「レシピ」にタブを使用していないため、間違ったセパレータエラーがあります。

例えば、あなたのターゲットターゲットは$(OBJECTS)の前提条件を持っています。一度Makeがそれを知っている(またはそれを作る)と、それはレシピに続きます。

$(TARGET): $(PREREQUISITES) 
    ->(TAB) $(RECIPE) 
+0

正しい。私はちょうどそのことにも気づいた。ありがとうございます – Medo

+0

問題はありません、私はちょうどコメントしただろうが、担当者がありません!楽しむ! –

関連する問題