Вложенный Makefile CLinux

Ответить
Anonymous
 Вложенный Makefile C

Сообщение Anonymous »

C/Makefile здесь относительный новичок. У меня есть проект C, структура которого выглядит следующим образом:

Код: Выделить всё

main.c
subdir1
a.h
a.c
b.h
b.c
subdir2
x.h
x.c
y.h
y.c
Я указываю исходные файлы следующим образом (я уверен, что для подобных вещей есть хитрое правило Makefile):

Код: Выделить всё

SOURCES := \
subdir1/subdir2/x.c \
subdir1/subdir2/y.c \
subdir1/a.c \
subdir1/b.c \
main.c
Я также могу указать свои включения следующим образом (я уверен, что есть лучший способ сделать это):

Код: Выделить всё

SRC_DIR := .
INCLUDES = -I$(SRC_DIR) -I$(SRC_DIR)/subdir1 -I$(SRC_DIR)/subdir2
Я хочу, чтобы скомпилированные объектные файлы находились в одном каталоге:

Код: Выделить всё

BUILD := build
OBJ = $(addprefix $(BUILD)/,$(notdir $(SOURCES:.c=.o)))
Затем я указываю свои цели и зависимости следующим образом:

Код: Выделить всё

all: test

test: $(OBJ)
$(CC) $(CFLAGS) $(OBJ) -o $(EXECUTABLE)

$(OBJ): $(C_SRC)
$(CC) -c $(CFLAGS) $(INCLUDES) $< -o $@

clean:
$(RM) $(BIN_DIR)/*.o
Когда я это делаю, похоже, что символ $< в соответствии с правилом $(OBJ) всегда принимает первый элемент в списке зависимостей $(C_SRC) (в данном случае x.c), хотя целевой символ $@ правильно отражает желаемый символ (xo, yo, ao и т. д.). Это заставляет компоновщик жаловаться, потому что один и тот же входной файл (x.c) компилируется в каждый ожидаемый выходной файл, поэтому используются несколько определяемых символов.
Может кто-нибудь помочь?

Подробнее здесь: https://stackoverflow.com/questions/797 ... c-makefile
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»