簡體   English   中英

Linux bash-script 在所有子目錄中運行 make

[英]Linux bash-script to run make in all subdirectories

我正在嘗試在 Linux 中編寫一個 bash 腳本,它遍歷當前目錄,並在每個子目錄中啟動現有的 makefile。 無論深度如何,它都應該適用於每個子目錄。

一些限制:

  • 我不會使用 Python;
  • 我事先不知道有多少子目錄及其名稱;
  • 我事先不知道當前目錄的名稱;
  • 只有在此類文件夾中有 makefile 時,才應啟動每個目錄的make命令。

關於如何做到這一點的任何想法?

使用-exec和 GNU

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 關於使用forfind說法,這種情況也適用於這里.. 問題是當目錄名稱中有空格時。 但是,在許多情況下這不會發生,恕我直言,使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM