我有一个简单的makefile:
run: myprogram
./myprog.out
myprogram: main.o otherfile.o
gcc -o myprog.out main.o otherfile.o
%.o : %.c
gcc -c $<
现在这会将所有 .o 文件放在我的 c 和 h 文件旁边,这很烦人。我想要一个名为“myObj”的子文件夹,例如所有 .o 文件都转储到其中,但仍然希望它将 myprog 构建到根文件夹中。这个问题的在线示例都过于复杂,我不确定其中的具体行对我实现此目标至关重要,但它们似乎都有基本的共同点。所以我尝试:
$(OBJDIR)/%.o : %.c
但是,这会执行完全相同的操作,并转储根文件夹中的所有 .o 文件。我怎样才能让它们进入子文件夹?
OBJDIR=myObj
run: myprogram
./myprog.out
myprogram: main.o otherfile.o
gcc -o myprog.out main.o otherfile.o
$(OBJDIR)/%.o : %.c
gcc -c $<
文件位于链接二进制文件的规则的子目录中。
你还有一些其他奇怪的事情。.o
依赖于一个名为
run
的文件,该文件永远不会存在,并运行名为 myprogram
的命令。同样,您有一个规则声称要构建一个名为 myprogram.out
的文件,但实际上构建了一个名为
myprogram
的文件。这些可能会导致您的代码被不必要地重新编译(或重新链接)。每个规则都应该构建它声称要构建的文件。所以你可能想要这样的东西:
myprogram.out