2011-05-03 66 views
10
SOURCES = server.c 

TARGET = Server 

CC = gcc 

all: $(SOURCES) $(TARGET) 


$(CC) $(SOURCES) -o $(TARGET) 

clean: 


rm -rf $(TARGET) 

以上就是我的Web服務器的Makefile文件。儘管server.c文件在目錄中,但這給出了下面的錯誤:Makefile的錯誤:沒有規則,使目標

make: *** No rule to make target `Server', needed by `all'. Stop. 

我犯了什麼錯誤以及如何解決它。

+1

請問你的makefile真的像上面?如果沒有,請編輯,直到兩場比賽。如果是這樣,請閱讀makefile語法。 – 2011-05-03 19:45:15

+0

雅這是我的生成文件。這給了我上面的錯誤。 – 2011-05-03 19:51:49

回答

17

我覺得你的makefile有你的機器和崗位之間的某處出現亂碼,但有一個簡單的解決方法,我認爲將工作:

all: $(SOURCES) 

這將(可能)解決問題,使錯誤走走 - 如果這是你想要的,那麼你可以停止閱讀。但是這個makefile文件仍然有問題,所以我們可以做一些改進。

首先,稍加調整,使其符合什麼,我認爲你的Makefile真說:

SOURCES = server.c 

TARGET = Server 

CC = gcc 

all: $(SOURCES) $(TARGET) 
    $(CC) $(SOURCES) -o $(TARGET) 

clean: 
    rm -rf $(TARGET) 

前三行和clean規則都是正確的,我們將忽略這些。現在我們給TARGET自己的規則和理順先決條件:

all: $(TARGET) 

$(TARGET): $(SOURCES) 
    $(CC) $(SOURCES) -o $(TARGET) 

現在我們做all假的(因爲它並沒有真正做一個名爲「所有」文件),並推出自動變量,使TARGET規則更強大,更少冗餘:

.PHONY: all 
all: $(TARGET) 

$(TARGET): $(SOURCES) 
    $(CC) $< -o [email protected] 

如果您的代碼庫變得更加複雜,但現在可以做到,還有更多需要了解的知識。

1

只是「使清潔」清理所有的鏈接,然後再次運行make。一切都應該很好。

0

我的問題是我的名字,並在同一行的命令。製作:確定您使用的是製表符而不是空格。 (沒有雙關語意)

BEFORE(碎)

build: docker build... 

build: 
     docker build... 
相關問題