如何在 Makefile 规则中正确添加依赖项列表前缀?

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

我的

Makefile
有适用于每个子目录的规则。当这样的规则具有依赖性时,我显然希望这些依赖性

  1. 在依赖项中提到时,它们应该绑定到与目标文件相同的路径。
  2. 规则中提到时,应使用与目标相同的路径。

我能想到的最好的例子是下面的例子。它有效,但看起来冗长且难以阅读。有没有更程序化的方法来解决这个问题?

BUILDDIR = build
BCFILES = file1.bc file2.bc file3.bc 

...

BCFILES_STARED = $(patsubst %, */$(BUILDDIR)/%, $(BCFILES))
*/$(BUILDDIR)/my_program.bc: $(BCFILES_STARED) */build
    llvm-link $(patsubst %, $(@D)/%, $(BCFILES)) -o $@
makefile gnu-make
1个回答
0
投票

我真的不清楚你想做什么。但也许是这样的:

BUILDDIR = build
BCFILES = file1.bc file2.bc file3.bc 

SUBDIRS := $(wildcard */.)
PROGRAMS := $(patsubst %/.,%/$(BUILDDIR)/my_program.bc,$(SUBDIRS))

all: $(PROGRAMS)

.SECONDEXPANSION:

%/my_program.bc: $$(addprefix $$(@D)/,$$(BCFILES))
          @mkdir -p $(@D)
          llvm-link $^ -o $@

您可以在 GNU Make 手册中查看有关通配符二次扩展的详细信息。

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