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

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

最佳答案

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

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

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

关于在本地临时目录中编译目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47425827/

相关文章:

c - 如何使用来自 Linux 内核模块的 Linux 系统调用

c - 一个程序怎样才能在特定的时间运行呢?

php - xgettext 给了我一个简单的行 : 的奇怪输出

angularjs - 如何永久运行 Ionic 服务?

linux - 在 linux 中创建共享库时如何包含依赖信息?

c - 使用 gcc 版本 4.3.3 构建 OpenSSL 1.1.1c 时出现问题

c - 如何从我生成的随机数组中删除重复元素?

linux - 如何使用基于linux的平台在windows硬盘上构建linux共享库?

c++ - x86_64-pc-cygwin-gcc 链接器错误

c - 返回本地结构?