Связывание сборки объекта в подкаталоге makefile

0

Я пытаюсь связать весь объект, который я создал в своем make файле во время исполняемой компиляции, но я не могу автоматизировать выбор каталога сборки.

Я пытался:

test: $(OBJECTS)
    $(CC) $(CFLAGS) $(INCDIR) $(LIBDIR) $(BUILDDIR)/$^ test.cpp -o test.exe

Проблема в том, что $(BUILDDIR)/$^ только вставляет $(BUILDDIR) перед первым объектным файлом.

Как я должен это делать?

Теги:
makefile

1 ответ

1
Лучший ответ

Если вы хотите добавить $(BUILDDIR) ко всем предварительным требованиям непосредственно в команде, вы можете сделать следующее:

test: $(OBJECTS)
    $(CC) $(CFLAGS) $(INCDIR) $(LIBDIR) $(addprefix $(BUILDDIR)/,$^) test.cpp -o test.exe

Однако настройка make rules таким образом означает, что вы неправильно отслеживаете зависимости. Я думаю, что вы действительно хотите это:

test: $(addprefix $(BUILDDIR)/,$(OBJECTS))
    $(CC) $(CFLAGS) $(INCDIR) $(LIBDIR) $^ test.cpp -o test.exe
  • 0
    Потрясающие. Это делает это. Хотя я думаю, что в этом случае я просто определю OBJECTS = $(addprefix $(BUILDDIR)/,$(SOURCES:.cpp=.o)) . Есть причина не делать этого?
  • 0
    Нет причин не делать этого. Я думаю, что поместить его в отдельную переменную, как это, даже аккуратнее.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню