【问题标题】:Compile object files in local temporary directories在本地临时目录中编译目标文件
【发布时间】:2017-11-22 02:22:46
【问题描述】:

我有一个 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, 但假设所有源文件都在同一个目录中。

【问题讨论】:

    标签: c linux gcc makefile


    【解决方案1】:

    基于此question,您可以尝试第二种方法的已接受答案中的方法:

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

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

    【讨论】:

    • 通常情况下,这就是 make 实际处理的事情。你有很多经验吗?
    猜你喜欢
    • 1970-01-01
    • 2013-04-28
    • 2014-11-27
    • 2010-12-17
    • 2010-11-10
    • 2016-03-14
    • 2017-12-22
    • 1970-01-01
    • 2012-02-06
    相关资源
    最近更新 更多