假设我的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)))