在Linux中编写一个脚本,在每个子目录maxdepth为2中运行make

时间:2014-04-09 14:54:10

标签: linux bash scripting csh

我希望编写一个脚本来进入每个子目录(不是递归)并运行make文件来创建二进制文件。一种方法是更改​​目录并为每个文件夹运行make,但它不是很优雅,如果添加了其他文件夹和文件,则可能容易出错。

我通过以下方式深入研究了儿童用品:

find -maxdepth 2 -type f -print -exec make {} . \;

我得到每个目录的错误,其中说明了以下内容:

make: Nothing to be done for reduc211/makefile.

任何人都对我能改变什么有任何想法?任何帮助将不胜感激!

非常感谢和愉快的编码。

2 个答案:

答案 0 :(得分:1)

make reduc211/makefile不运行命名的makefile;它使用make的查找规则查找Makefile并尝试生成目标reduc211/makefile。你想要的是像

find -maxdepth 2 -name 'Makefile' -print -execdir make \;

这会在找到名为make的文件的每个目录中运行Makefile命令。

如果你有不同名称的makefile,例如每个都是Makefile.something的形式,你可以试试

find -maxdepth 2 -name 'Makefile.*' -print -execdir make -f \{}\ \;

使用make找到的特定Makefile运行find

答案 1 :(得分:0)

这样的东西?

for dir in *; do
    if [ -d "$dir" ]; then
        (cd "$dir" && make)
    fi
end