当然使用 GNU Make。
我有以下设置:
Makefile
subdir1
--- Makefile
--- source1.c
--- binary1
subdir2
--- Makefile
--- source2.c
--- binary2
子目录中的两个 makefile 都有一个运行目标,该目标执行其自身生成的二进制文件。 根 makefile 包含
all
目标,它运行 make -C subir1 && make -C subdir2
:
SUBDIRS = subdir1 subdir2
all:
@for DIR in $(SUBDIRS); do \
$(MAKE) -C $$DIR; \
done
clean:
@for DIR in $(SUBDIRS); do \
$(MAKE) -C $$DIR clean; \
done
$(SUBDIRS):
$(MAKE) -C $@
底部位允许我对单个子目录执行
make all
。
我想要一个类似的 make run
目标,由 $(SUBDIRS)
生成。
我试过了
run-$(SUBDIRS):
make -C $(subst run-,,$@) run
但是目标扩展为
run-subdir1 subdir2
,并且没有将前缀添加到$(SUBDIRS)
中的第二项
如果我添加一个新的 var
RUN_TARGETS = $(addprefix run-, $(SUBDIRS)
,它可以工作,但是 make 无法识别自动完成的目标。是否有任何选项可以让 make 知道必须扩展 RUN_TARGETS 或任何其他方法来为项目列表添加前缀?
对我来说,问题是我的 shell、zsh,而不是 make 本身。 Bash 补全正确。