我正在尝试获取不同目录中的目标文件和可执行文件。在根文件夹中有一个 obj 和 exe 文件夹,但我不知道如何让 make 运行它。
我尝试过类似的东西:
$(EXEDIR)/sfml-app: $(OBJ)
和
$(OBJDIR)/%.o: %.cpp
但它给了我错误。谁能解释我如何让它运行?
如果你想让你的输出到另一个目录,你必须告诉 make(和编译器)它。他们不会只是猜测,因为您有一个名为OBJDIR
! 您必须实际使用它。
确保您的目标名称具有目录前缀,以便 make 知道您希望目标文件结束的位置:
OBJ = $(patsubst %.cpp, $(OBJDIR)/%.o, $(SRC))
并确保通过使用-o
标志告诉编译器您希望目标文件在哪里结束:
$(OBJDIR)/%.o: %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
同样,如果您希望最终输出到EXEDIR
您必须在 makefile 中使用它并将该值发送到链接器,再次通过-o
:
all: $(EXEDIR)/sfml-app
$(EXEDIR)/sfml-app: $(OBJ)
$(CXX) -o $@ $(OBJ) $(LIBS)