2016-07-08 2 views
1

Я не понимаю, почему это работает:Makefile - Добавление объектов в папку

CC = gcc 
CFLAGS = -fPIC 
LDFLAGS = -shared 
SRC = src/file.c 
OBJ := $(SRC:.c=.o) 

test: $(OBJ) 
    $(CC) $(CFLAGS) $(LDFLAGS) -o [email protected] $^ 

И это не делает:

CC = gcc 
CFLAGS = -fPIC 
LDFLAGS = -shared 
SRC = file.c 
OBJ := $(addprefix output/, $(SRC:.c=.o)) 
SRC := $(addprefix src/, $(SRC)) 

test: $(OBJ) 
    $(CC) $(CFLAGS) $(LDFLAGS) -o [email protected] $^ 

Как я только пытаюсь сделать папку вывода все OBJ. НКУ говорит мне, что нет никакого правила, чтобы сделать «вывод/файл file.o», который оставляет меня смущать ...

ответ

0

Это потому, что есть встроенный правило, знает, как строить X.o из X.c для любого X, но не является встроенным правилом, который знает, как построить output/X.o от src/X.c. Как может быть такое встроенное правило, которое знает о какой-либо специальной структуре каталогов, с которой вы сталкиваетесь?

Вы должны определить свои собственные правила:

output/%.o : src/%.c 
     $(COMPILE.c) $(OUTPUT_OPTION) $< 
+0

Отлично! Вот и все - спасибо –

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