2016-12-02 70 views
0

所以我寫了一個程序來計算凱撒密碼,但我認爲這並不重要 - 什麼事情是,當我試圖做make編譯器或誰檢查我的生成文件的語法是拋出一個錯誤說:makefile使奇怪的錯誤

使:***沒有規則,使目標'乾淨','PHONY'需要。停止。

在我的目錄我有5個文件:

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

和makefile文件看起來像:

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))時,應清理的對象文件應檢查c文件是否有頭文件(解析器和caeser,不是主)。 我使用的是Ubuntu 15.10,請幫助我:)

+10

'PHONY:全部乾淨.'刪除乾淨後的時間段(在* phony:'.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

這並不真正解決這個問題,這是一個微不足道的錯字。 –