小编Oli*_*han的帖子

makefile:foreach"make -C"调用

这是我的makefile的一部分:

PATH := $(shell pwd)
EDIR := impl
EFFECTS := $(filter-out $(EDIR), $(shell find $(EDIR) -maxdepth 1 -type d))
ALLMAKES := $(patsubst %, $(PATH)/%, $(EFFECTS))


all:
      $(foreach c,$(ALLMAKES),$(MAKE) -C $(c))
Run Code Online (Sandbox Code Playgroud)

基本上,我想为"impl"目录中的所有目录调用make而不使用"impl"本身.我知道make会记住上次使用-C参数调用时的最后一个目录,这就是我每次都给出绝对路径的原因.是什么让回声看起来像我想要的:

make -C <projectdir>/impl/thing1 make -C <projectdir>/impl/thing2 make -C <projectdir>/impl/thing3
Run Code Online (Sandbox Code Playgroud)

问题是make不能完成命令并只是打印:

make: make: Command not found. 
Run Code Online (Sandbox Code Playgroud)

我可以在makefile之外单独调用每个目录的"make -C <path>",但它在foreach调用中不起作用.我试过这个,但它也不起作用:

$(foreach c,$(ALLMAKES),$(shell make -C $(c)))
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

ubuntu makefile gnu-make

2
推荐指数
1
解决办法
8374
查看次数

标签 统计

gnu-make ×1

makefile ×1

ubuntu ×1