Makefile,可执行文件和目标文件在不同的目录中

时间:2013-07-22 19:13:16

标签: linux makefile

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

我尝过这样的话:

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

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

但它给了我错误。任何人都能解释我如何才能让它运行起来吗?

1 个答案:

答案 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)