Makefile:从列表中创建先决条件

Makefile:从列表中创建先决条件

在 Makefiles 中创建 1:1 依赖关系的常用方法是使用%,例如

%o:%cc

假设我有 50 个.cc文件,但我只对其中 3 个感兴趣。我构建了他们的基本名称列表:

CC_BASENAMES := Source15 Source32 Source41

如何.o通过迭代$(CC_BASENAMES).效果应该相当于:

Source15.o: Source15.cc

Source32.o: Source32.cc

Source41.o: Source41.cc

答案1

我不确定你在问什么,但有几种简单的方法可以操作字符串。

例如,您可以将后缀添加.o到每个基本名称中OBJS = $(addsuffix .o,$(CC_BASENAMES))

您可以将一个后缀转换为另一个后缀,例如$(OBJS:.o=.cc).所以也许您想要的是一个 Makefile,例如

CC_BASENAMES := Source15 Source32 Source41
OBJS = $(addsuffix .o,$(CC_BASENAMES))
SRCS = $(OBJS:.o=.cc)

fred.o: $(SRCS)
        cc $(SRCS) -o fred.o

或者更常见的是,您首先定义 SRCS 并从中派生 OBJS。


如果您希望依赖规则仅应用于某些目标,您可以使用目标:目标模式:先决条件模式IE

$(OBJS): %.o: %.cc

gnu 制作

答案2

拥有一般构建规则(如%o:%cc)并不意味着make每次都必须检查所有 50 个源文件。您需要做的是指定您想要的输出,然后make应用规则来为您构建它。例如你可以跑

$ make Source15.o Source32.o Source41.o

在命令行上,或在 makefile 中创建特定目标

my_build: Source15.o Source32.o Source41.o

然后要求make建立该目标:

$ make my_build

相关内容