#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. Является ли
:
inOBJ_DIR := lib
преднамеренным?2. Я просто просматриваю документацию на веб-сайте GNU и говорю, что да, это намеренно.
3. Не могли бы вы свести пример к минимуму? Существует множество пустых переменных, а именно CPPFLAGS и CXXFLAGS
4. Попробуйте удалить
vpath %.o
строку.5. теперь это работает, хотя я ничего не менял. (Это работало до того, как я тоже удалил пустые переменные)