C makefile: как извлечь файлы *.o в специальную папку?

#c #makefile #compilation

#c #makefile #Сборник

Вопрос:

Мой makefile работает, когда я удаляю $ (OBJ_DIR), но я хочу, чтобы мои файлы * .o для извлечения находились в папке lib.

Вот мой makefile:

 CC=g  

vpath %.h include
vpath %.cpp src
vpath %.o lib

OUT_DIR = bin
OBJDIR = lib

CFLAGS = -O2 -Wall -pedantic
LIBS = -lnsl -lm

OBJS = $(OBJDIR)/main.o $(OBJDIR)/AVLTree.o $(OBJDIR)/AVLTreeNode.o $(OBJDIR)/PersonData.o $(OBJDIR)/Stack.o

all:program

program:$(OBJS)
    $(CC) $(CFLAGS) $(OBJS) -o $(OUT_DIR)/program -static-libstdc  

$(OBJDIR)/%.o: %.cpp
    $(CC) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<

.PHONY : clean
clean :
    rm -f *.o $(OUT_DIR)/main.exe
  

и это выдает эту ошибку:

 > g  : error: lib/main.o: No such file or directory g  : error:
> lib/AVLTree.o: No such file or directory g  : error:
> lib/AVLTreeNode.o: No such file or directory g  : error:
> lib/PersonData.o: No such file or directory g  : error: lib/Stack.o:
> No such file or directory
  

введите описание изображения здесь

.o файлы, созданные в папке Projects, но они должны находиться в папке lib.

 CC=g  

vpath %.h include
vpath %.cpp src
vpath %.o lib

OUT_DIR = bin
OBJDIR = lib

CFLAGS = -O2 -Wall -pedantic
LIBS = -lnsl -lm

OBJS = $(OBJDIR)/main.o $(OBJDIR)/AVLTree.o $(OBJDIR)/AVLTreeNode.o $(OBJDIR)/PersonData.o $(OBJDIR)/Stack.o

all:program

program:$(OBJS)
    $(CC) $(CFLAGS) $(OBJS) -o $(OUT_DIR)/program -static-libstdc  

$(OBJDIR)/%.o: %.cpp
    $(CC) -c -o  $@ $<

.PHONY : clean
clean :
    rm -f *.o $(OUT_DIR)/main.exe
  

Я не знаю почему, но теперь это работает отлично!

Комментарии:

1. Является ли : in OBJ_DIR := lib преднамеренным?

2. Я просто просматриваю документацию на веб-сайте GNU и говорю, что да, это намеренно.

3. Не могли бы вы свести пример к минимуму? Существует множество пустых переменных, а именно CPPFLAGS и CXXFLAGS

4. Попробуйте удалить vpath %.o строку.

5. теперь это работает, хотя я ничего не менял. (Это работало до того, как я тоже удалил пустые переменные)