Makefile - 将 .o 文件放入子文件夹中

问题描述 投票:0回答:1

我有一个简单的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 文件。我怎样才能让它们进入子文件夹?

c makefile
1个回答
0
投票
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

© www.soinside.com 2019 - 2024. All rights reserved.