在 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