2016-09-26 4 views
1

Я попытался сделать make-файл. У меня есть следующая структура папок.Makefile не находит исходные файлы

Source 
    - include 
    - My headerfiles 
    - objects 
    - The object files 
    - src 
    - My source files 

Моя проблема заключается в том, что исходные файлы в каталоге src не найдены.

Мой файл make выглядит следующим образом.

# gcc for C 
# g++ for c++ 
CC = gcc 

#compiler flags 
# -g adds debugging information to the executebells 
# -Wall 
CFLAGS = -g -Wall 

#target 
TARGET = gabe_the_dog_server 
#directory for the object files 
OBJDIR = ./objects 
SRCDIR = ./src 

default: $(TARGET) 
all: default 

HEADERS = $(wildcard include/*.h) 
OBJECTS := $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o) 

$(OBJDIR)/%.o: $(SRCDIR)/%.c $(HEADERS) 
    $(CC) $(CFLAGS) -c $< -o [email protected] 

$(TARGET): $(OBJECTS) 
    $(CC) $(OBJECTS) $(CFLAGS) $(LIBS) -o $(OBJDIR)/[email protected] 

$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c 
    $(CC) $(CFLAGS) -c $< -o [email protected] 

clean: 
    -rm -f *.o 
    -rm -f $(TARGET) 

ответ

0

Здесь:

OBJECTS := $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o) 

использовать переменную SOURCES, но вы никогда не определить. Вам нужна еще одна линия:

SOURCES = $(wildcard $(SRCDIR)/*.c) 
OBJECTS := $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o) 
0

Вместо того, чтобы использовать путь к исходным файлам, это рекомендуется поместить этот путь в специальной переменной с именем VPATH. Тогда вы просто упомянуть ваш исходный файл, например:

OBJDIR = ./obj 
SRCDIR = ./src 
VPATH = $(SRCDIR) 
OBJECTS = $(addprefix $(OBJDIR)/, foo.o bar.o) 

all: $(OBJECTS) 

$(OBJDIR)/%.o: %.c 
$(cc) ... 

GNU make будет выглядеть в папках, находящихся в VPATH для файлов, которые являются предпосылками цели. Обратите внимание, что это может быть проблемой, если у вас есть несколько папок, где вы можете найти несколько раз одно и то же имя файла.

См. GNU make VPATH manual. Если вам нужны дополнительные примеры VPATH передовой практики, смотрите по этой ссылке, а также: Mad Scientist: How not to use VPATH

Смежные вопросы