2

我正在尝试获取不同目录中的目标文件和可执行文件。在根文件夹中有一个 obj 和 exe 文件夹,但我不知道如何让 make 运行它。

我尝试过类似的东西:

$(EXEDIR)/sfml-app: $(OBJ) 

$(OBJDIR)/%.o: %.cpp 

但它给了我错误。谁能解释我如何让它运行?

4

1 回答 1

4

如果你想让你的输出到另一个目录,你必须告诉 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)
于 2013-07-22T19:21:44.037 回答