在本地临时目录中编译目标文件

时间:2017-11-22 02:22:46

标签: c linux gcc makefile

我有一个GNU Makefile项目,源文件分散在多个目录中,即:

Project/common/base.c
Project/common/test.c
Project/delta/delta.c
Project/delta/bravo/alt.c

我想尝试两种不同的生成目标文件的方法,然后 链接他们:

类型1:

ARCH=arm64
Project/common/base.c       ==>     Project/common/.tmp/${ARCH}/base.o
Project/common/test.c       ==>     Project/common/.tmp/${ARCH}/test.o
Project/delta/delta.c       ==>     Project/delta/.tmp/${ARCH}/delta.o
Project/delta/bravo/alt.c   ==>     Project/delta/bravo/.tmp/${ARCH}/alt.o

类型2:

ARCH=arm64
Project/common/base.c       ==>     .tmp/${ARCH}/Project/common/base.o
Project/common/test.c       ==>     .tmp/${ARCH}/Project/common/test.o
Project/delta/delta.c       ==>     .tmp/${ARCH}/Project/delta/delta.o
Project/delta/bravo/alt.c   ==>     .tmp/${ARCH}/Project/delta/bravo/alt.o

如何生成这样的构建规则,以便我可以添加更多源代码 文件到列表,并让构建迭代它们,创建输出/对象 上面显示的文件名模式的文件,然后将最终的二进制文件/应用程序与生成的目标文件相关联? I've tried a similar such approach as described in another question, 但是那个假设所有的源文件都在同一个目录中。

1 个答案:

答案 0 :(得分:1)

根据此question,您可以在接受的答案中尝试使用第二种方法的方法:

$(OBJDIR)/%.o: %.c
    $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<

并将$(OBJDIR)定义为.tmp/${ARCH}