假设我的 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)
请帮忙 谢谢!
最佳答案
此网站上已经存在与您类似的问题:
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)))
关于c++ - 设置Makefile在另一个目录中构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33983060/