2017-02-03 9 views
2

Я следующий это руководство о makefile, но я не понимаю вообще последний пример, и я не могу получить мою Makefile работу, так как я получаю ошибку make: *** No rule to make target "obj/date.o", needed by "Whatsapp". Stop.Makefile: нет правила, чтобы сделать цель на

Вот мой Makefile:

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

ODIR = obj 
LDIR = ../lib 

LIBS = -lncurses 

# Keep the alphabetical order! 
_DEPS = \ 
constants.h\ 
date.h\ 
inOut.h\ 
languages.h\ 
message.h\ 
mycurses.h\ 
mysocket.h\ 
text.h\ 
time.h\ 
user.h\ 

DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS)) 

# Keep the alphabetical order! 
_OBJ = \ 
date.o\ 
inOut.o\ 
languages.o\ 
main.o\ 
message.o\ 
mycurses.o\ 
mysocket.o\ 
text.o\ 
time.o\ 
user.o\ 

OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ)) 

# these two lines should tell the compilator that my .o files depend by .c files, don't they? 
$(ODIR)/%.o: %.c $(DEPS) 
    $(CC) -c -o [email protected] $< $(CFLAGS) 

Whatsapp: $(OBJ) 
    $(CC) -o [email protected] $^ $(CFLAGS) $(LIBS) 

.PHONY: clean 

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

Очевидно, что все мои *.c находятся в текущей папке, так что на самом деле я не знаю, что мне не хватает.

Просто для большей ясности, здесь содержание текущей папки:

[email protected]:/media/sf_Whatsapp_CLIENT$ ls 
constants.h indexbook.txt languages.c makefile    message.h mycurses.h text.c time.h 
date.c  inOut.c  languages.h message.c    message.txt mysocket.c text.h user.c 
date.h  inOut.h  main.c  message_for_user.txt mycurses.c mysocket.h time.c user.h 
+1

Вы уверены, что присутствует 'data.c' и имя точно такое же, как я написал? – LPs

+0

попробуйте 'make -f Makefile' и сообщите нам о выходе. – LPs

+0

Я пробовал, и это точно такой же результат. – UrbiJr

ответ

3

Ваши зависимости не как вы указали в makefile. В приведенной ниже строке указано, что все включенные файлы должны находиться в каталоге $(IDIR).

DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS)) 

Это устанавливается как ../include, но, кажется, у вас есть все файлы заголовков в том же каталоге. Переместите их на ../include или измените IDIR на номер . (текущий каталог).

Вам также необходимо создать выходной каталог (obj), так как make не сделает это автоматически.

+0

@JohnBollinger При исправлении этой ошибки программа строит отлично со мной (остроумие) h, используя те же имена). –

+0

Очень хорошо, но можете ли вы воспроизвести ошибку OP? –

+0

Да. Я получаю ту же ошибку перед моим изменением, и после моего изменения проблема решена. –