将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子目录中。

目前,它只适用于我逐一命名所有对象文件的情况。

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)

请帮忙非常感谢。

这个网站上已经存在与您类似的问题:

我可以在src/to.o';中编译所有.cpp文件吗;s,然后链接到中的二进制文件。/?

不管怎样,这样的东西都应该解决你的问题:

OBJ_FILES := $(addprefix obj/,$(notdir $(CPP_FILES:.cpp=.o)))

最新更新