C++ 将Makefile设置为在另一个目录中生成

C++ 将Makefile设置为在另一个目录中生成,c++,makefile,C++,Makefile,假设我的Makefile与源文件位于同一个目录中,并且我希望将对象文件存储在obj/子目录中,将目标可执行文件存储在bin/子目录中 src/ main.cpp test.cpp test.h /many other *.cpp files and headers/ Makefile obj/ bin/ 我的Makefile的问题是无法将OBJECTS变量 包含一个*.o文件列表,其名称与*.cpp文件相同,但位于OBJDIR子目录中

假设我的Makefile与源文件位于同一个目录中,并且我希望将对象文件存储在obj/子目录中,将目标可执行文件存储在bin/子目录中

src/
    main.cpp 
    test.cpp
    test.h
    /many other *.cpp files and headers/ 
    Makefile
    obj/
    bin/
我的Makefile的问题是无法将OBJECTS变量 包含一个*.o文件列表,其名称与*.cpp文件相同,但位于OBJDIR子目录中

src/
    main.cpp 
    test.cpp
    test.h
    /many other *.cpp files and headers/ 
    Makefile
    obj/
    bin/
目前,它只有在我逐个命名所有对象文件时才起作用

CXX=g++
CXXFLAGS=-c -Wall 
LDFLAGS=
SOURCES=$(wildcard *.cpp) # very convenient wildcard
BINDIR=bin
OBJDIR=obj
OBJECTS=$(OBJDIR)/main.o $(OBJDIR)/test.o # how do I make a wildcard here?
TARGET=$(BINDIR)/my_executable

all: $(SOURCES) $(TARGET)

$(TARGET): $(OBJECTS)
    $(CXX) $(LDFLAGS) $(OBJECTS) -o $@

$(OBJECTS): $(OBJDIR)/%.o: %.cpp
    $(CXX) $(CXXFLAGS)  -c $< -o $@

clean:
    rm -rf $(OBJDIR)/$(OBJECTS) $(BINDIR)/$(TARGET)
CXX=g++
CXXFLAGS=-c-墙
LDFLAGS=
SOURCES=$(通配符*.cpp)#非常方便的通配符
BINDIR=bin
OBJDIR=obj
OBJECTS=$(OBJDIR)/main.o$(OBJDIR)/test.o#如何在这里生成通配符?
TARGET=$(BINDIR)/my\u可执行文件
全部:$(来源)$(目标)
$(目标):$(对象)
$(CXX)$(LDFLAGS)$(对象)-o$@
$(对象):$(OBJDIR)/%.o:%.cpp
$(CXX)$(CXXFLAGS)-c$<-o$@
清洁:
rm-rf$(OBJDIR)/$(对象)$(BINDIR)/$(目标)
请帮忙
谢谢大家!

与您的问题类似的问题已经存在于此网站:

无论哪种方式,像这样的事情都可以解决您的问题:

OBJ_FILES := $(addprefix obj/,$(notdir $(CPP_FILES:.cpp=.o)))
可能重复的