我正在尝试将目标文件和可执行文件放在不同的目录中。在根文件夹中有一个obj和exe文件夹,但我不知道如何让它运行它。
我尝过这样的话:
$(EXEDIR)/sfml-app: $(OBJ)
和
$(OBJDIR)/%.o: %.cpp
但它给了我错误。任何人都能解释我如何才能让它运行起来吗?
答案 0 :(得分:3)
如果您希望输出转到另一个目录,则必须告诉make(和编译器)。他们不会猜测,因为你有一个名为OBJDIR
的变量!你必须真正使用它。
确保您的目标名称具有目录前缀,以便知道您希望目标文件最终到达的位置:
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)