将Makefile设置为在另一个目录中构建

时间:2015-11-29 13:01:59

标签: c++ makefile

假设我的Makefile与源位于同一目录中,我想将目标文件存储在obj /子目录中,目标可执行文件存储在bin /子目录中。

src/
    main.cpp 
    test.cpp
    test.h
    /many other *.cpp files and headers/ 
    Makefile
    obj/
    bin/

我的Makefile的问题是我无法获取OBJECTS变量 包含一个* .o文件列表,其中samy名称为* .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)

请帮忙 谢谢!

1 个答案:

答案 0 :(得分:2)

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

Can I compile all .cpp files in src/ to .o's in obj/, then link to binary in ./?

无论哪种方式都可以解决你的问题:

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