[英]Linux bash-script to run make in all subdirectories
我正在嘗試在 Linux 中編寫一個 bash 腳本,它遍歷當前目錄,並在每個子目錄中啟動現有的 makefile。 無論深度如何,它都應該適用於每個子目錄。
一些限制:
make
命令。關於如何做到這一點的任何想法?
使用-exec
和 GNU make
find -type f \( -name 'GNUmakefile' -o -name 'makefile' -o -name 'Makefile' \) \
-exec bash -c 'cd "$(dirname "{}")" && 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 的解決方案可以處理目錄名稱中的空格,但我無法想到它。)
您可以使用此腳本https://gist.github.com/legeyda/8b2cf2c213476c6fe6e25619fe22efd0 。
示例用法是:
foreach */ 'test -f Makefile && make'
如果不關心執行順序或者父目錄也有 Makefile,這應該可以工作。
#!/bin/bash
for f in $(find . -name Makefile); do
pushd $(dirname $f)
make
popd
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.