2016-12-02 5 views
0

シーザー暗号を計算するプログラムを書いたが、実際には問題ではないと思う - makeコンパイラを実行しようとしているとき、またはメイクファイルの構文をチェックするときにエラーが発生する:メイクファイルが奇妙なエラーを起こす

make:*** 'PHONY'が必要とするターゲットを 'クリーン'にするルールはありません。やめる。

main.c 
ceasar.c 
ceasar.h 
parser.c 
parser.h 

とメイクファイルは次のようになります:

PHONY : all clean. 
CFLAGS = -c -g -Wall 
CXXFLAGS = -o 
CC = gcc 
OBJECTS = main.o ceasar.o parser.o 
EXTRA_SRCS = ceasear.h parser.h 

all : ex1 

ex1 : $(objects) 
    $(CC) $(CXXFLAGS) ex1 $(objects) 
%.o : %.c $(wildcard $(EXTRA_SRCS)) 
    $(CC) $(CFLAGS) $< 

clean: 
    rm *.o 

make clean を入力し、ライン$(wildcard $(EXTRA_SRCS))がすべき時にメイクファイルがオブジェクトファイルをクリーンアップする必要があり、私は5つのファイルを持っている私のディレクトリで

cファイルにヘッダファイルがあるかどうかをチェックします(メインではなくパーサとカーザです)。 私はubuntu 15.10を使用しています。私を助けてください。

+10

'' PHONY:すべてクリーン '' '' clean ''の後のピリオドを削除します。(そして、* *前にピリオド* '' .PHONY''をつけてください) – joop

答えて

1

架空のターゲットを指定すると、一連の操作を実行する目的があります。これらのターゲットは依存関係を指定せず、明示的にmakeコマンドの引数として渡された場合にのみ実行される最初のルールとしては使用できません。偽のターゲットはファイルではなく(ファイルは存在しません)、それぞれの場合にコマンドの実行を開始するために使用されます。

CFLAGS = -c -g -Wall 
CXXFLAGS = -o 
CC = gcc 
OBJECTS = main.o ceasar.o parser.o 
EXTRA_SRCS = ceasear.h parser.h 

all : ex1 

ex1 : $(objects) 
$(CC) $(CXXFLAGS) ex1 $(objects) 
%.o : %.c $(wildcard $(EXTRA_SRCS)) 
$(CC) $(CFLAGS) $< 

.PHONY: clean 

clean: rm *.o 

架空の目標は、既存のファイルによってマスクすることができるので、ように注意してください:誤ったディレクトリには、ターゲットは依存関係がないとして、その後、架空のターゲットの同じ名前というファイルを作成し、場合ファイルが既に存在する場合、そのファイルを更新する必要はなく、コマンドリストは決して実行されません。

+5

これは簡単な誤字の問題ではありません。 –