2017-09-25 294 views
-1

我想使用一個Makefile來編譯幾個.c文件和一對夫婦的定製.h文件,使一個可執行文件編譯時。然而在編譯im時收到錯誤的錯誤「沒有這樣的文件或目錄」。錯誤「沒有這樣的文件或目錄」與Makefile文件

這裏是我的Makefile中,有沒有邏輯可能的漏洞,爲什麼頭文件在編譯過程中被遺忘?

錯誤的$(BIN)main.o規則期間發生在編譯的第21行。

這是編譯時錯誤:

[email protected]:~/Desktop/Programs/CIS2520/root$ make 
gcc -Wall -g -std=c99 -c -Iinclude -c ./src/main.c 
./src/main.c:4:23: fatal error: structDefns: No such file or directory 
#include "structDefns" 
        ^
compilation terminated. 
makefile:21: recipe for target 'bin/main.o' failed 
make: *** [bin/main.o] Error 1 
[email protected]:~/Desktop/Programs/CIS2520/root$ 

這是生成文件:

CC = gcc 
CFLAGS = -Wall -g -std=c99 -Iinclude 

BIN = ./bin/ 
SRC = ./src/ 
INC = ./include/ 

$(BIN)main:  $(BIN)main.o $(BIN)book.o $(BIN)store.o $(BIN)boardGame.o 
     $(CC) -o $(BIN)main $(BIN)main.o $(BIN)book.o $(BIN)store.o 
$(BIN)boardGame.o 

$(BIN)book.o: $(SRC)book.c $(INC)structDefns.h $(INC)funcDefns.h 
     $(CC) $(CFLAGS) -c $(SRC)book.c 

$(BIN)boardGame.o:  $(SRC)boardGame.c $(INC)structDefns.h $(INC)funcDefns.h 
     $(CC) $(CFLAGS) -c $(SRC)boardGame.c 

$(BIN)store.o: $(SRC)store.c $(INC)structDefns.h $(INC)funcDefns.h 
     $(CC) $(CFLAGS) -c $(SRC)store.c 

$(BIN)main.o: $(SRC)main.c $(INC)structDefns.h $(INC)funcDefns.h 
       $(CC) $(CFLAGS) -c $(SRC)main.c 

至於文件目錄,make文件是3個文件夾,垃圾桶,SRC和外包括。 bin是我想要的對象和可執行文件,src是.c文件所在的位置,.h文件位於include文件夾中。

+0

如果沒有看到所有的文件和目錄結構,我們無法確定。據我們所知,這可能是一個錯字。 – Evert

+0

如果您顯示完整的編譯命令+錯誤,它也會有所幫助。 – Evert

+0

您將兩個頭文件列爲依賴項,但在實際命令中沒有看到任何標誌來提供路徑,因此可以實際找到這些文件。也就是說,CFLAGS不包括-I $(INC)或類似的。 – Evert

回答

1

從編譯命令,錯誤和錯誤給出的源代碼行:

gcc -Wall -g -std=c99 -c ./src/main.c 
./src/main.c:4:23: fatal error: structDefns: No such file or directory 
#include "structDefns" 

它表明gcc找不到包含文件。它期望它位於與main相同的目錄中,但是你的Makefile顯示它在./include(或甚至相對於main的../include)中生效。

用正確的路徑使用-I標誌gcc在一起。您可以將其與其他CFLAGS一起設置:

CFLAGS = -Wall -g -std=c99 -Iinclude 

應該這樣做。 (我可能是與路徑稍微弄錯如果仍然失敗,請嘗試-I./include或相對路徑的變化,以主:。-I../include但它應該是從那裏發出的命令,而不是相對於main.c的目錄路徑)

+0

我很欣賞響應的時間和精力。不幸的是,我嘗試的所有變化(大約4或5)都沒有發揮作用。 – user8667363

+0

@ user8667363首先嚐試'gcc -Wall -g -std = c99 -c ./src/main.c -Iinclude'。如果失敗並出現其他錯誤,請顯示該錯誤。 – Evert

+0

這是完全相同的錯誤(我相信)唯一不同的可能是./src/main的順序。C和-I包括,我不知道這是否重要。但是,我更新了原始錯誤,因此您可以查看它。謝謝!! – user8667363

相關問題