2017-05-10 59 views
0

不好意思問簡單的問題,但我找不到問題所在。 我有一個src目錄,包含makefile和obj文件夾。一個include文件夾和一個lib之一。該代碼提供了here沒有制定目標的規則(在不同的目錄下製作項目)

IDIR =../include 
CC=gcc 
CFLAGS=-I$(IDIR) 

ODIR=obj 
LDIR =../lib 

LIBS=-lm 

_DEPS = hellomake.h 
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS)) 

_OBJ = hellomake.o hellofunc.o 
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ)) 


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

hellomake: $(OBJ) 
    gcc -o [email protected] $^ $(CFLAGS) $(LIBS) 

.PHONY: clean 

clean: 
    rm -f $(ODIR)/*.o *~ 

它給了我下面的錯誤:

gcc -c -o obj/hellomake.o hellomake.c -I../include 
make: *** No rule to make target 'obj/hellofunc.o', needed by 'hellomake'. Stop. 

它使用創建.o文件和文件hellomake相同的規則。但最後一個不起作用。 感謝您的任何意見或指導。

+0

的例子來自這裏:(http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor /) – Abolfazl

+0

如果你的makefile在'src'中,並且你在'src'中運行它,那麼在'src'中沒有叫'hellofunc.c'的文件 。你有沒有拼寫錯誤 ('hellofun.c')? –

+0

'hellomake.c'在'src'中''hellofunc.c'在'lib'中。你可以看看文件嗎?它只是幾個。 – Abolfazl

回答

0

你有一個src目錄,但你不告訴做它。 Make抱怨沒有hellofunc.c。 (有一個src/hellofunc.c,但要根本不知道放在那兒。)試試這個:

SRC := src 

$(ODIR)/%.o: $(SRC)/%.c $(DEPS) 
    $(CC) -c -o [email protected] $< $(CFLAGS) 
+0

請問我仍然有同樣的錯誤。 makefile在src目錄中。 – Abolfazl

+0

@Aololzzl:你在哪裏執行Make? – Beta

相關問題