我试图在Linux中编写一个遍历当前目录的bash脚本,并在每个子目录中启动现有的makefile。它应该适用于每个子目录,无论深度如何。
一些限制:
make
命令。关于如何做的任何想法?
答案 0 :(得分:5)
使用-exec
和GNU make
find -type f \( -name 'GNUmakefile' -o -name 'makefile' -o -name 'Makefile' \) \
-exec bash -c 'cd "$(dirname "{}")" && make' \;
答案 1 :(得分:1)
您可以使用此脚本https://gist.github.com/legeyda/8b2cf2c213476c6fe6e25619fe22efd0。
示例用法是:
foreach */ 'test -f Makefile && make'
答案 2 :(得分:1)
鉴于这与make有关。我尝试在顶层使用makefile而不是脚本。像这样:
MAKEFILES:=$(shell find . -mindepth 2 -name Makefile -type f)
DIRS:=$(foreach m,$(MAKEFILES),$(realpath $(dir $(m))))
.PHONY: all
all: $(DIRS)
.PHONY: $(DIRS)
$(DIRS):
$(MAKE) -C $@
我接受@MLSC关于将for
与find
一起使用的说法,这种情况也适用于此...问题是当目录名中有空格时。但是,在许多情况下不会发生这种情况,恕我直言,使用makefile而不是脚本会有好处。 (可能有一个使用make的解决方案,可以处理目录名称中的空格,但我无法想到它。)
答案 3 :(得分:0)
如果不关心执行顺序或父目录也有Makefile,这应该有用。
#!/bin/bash
for f in $(find . -name Makefile); do
pushd $(dirname $f)
make
popd
done