我有一个关于在当前系统的makefile中执行复杂命令的查询。
我目前在makefile中使用shell命令来执行命令。但是,我的命令失败,因为它是许多命令的组合,执行会收集大量数据。 makefile内容是这样的:
variable=$(shell ls -lart | grep name | cut -d/ -f2- )
然而make
执行因execvp失败而失败,因为文件列表很大,我需要解析所有这些。
请建议我解决此问题的任何方法。基本上我想执行一个复杂的命令并将该输出分配给我想在程序中稍后使用的makefile变量。
答案 0 :(得分:0)
(这可能需要几次迭代。)
这看起来像是架构的限制,而不是Make限制。有几种方法可以解决它,但您必须告诉我们如何使用variable
,否则即使您成功构建它,也可能无法按照您的意图使用它。请向我们展示您打算在variable
上执行的完全操作。
现在我建议你做几个实验并告诉我们结果。首先,尝试使用短文件列表(例如三个)进行分配,以验证分配是否符合您的意图。其次,在包含许多文件的目录中,尝试:
variable=$(shell ls -lart | grep name)
查看问题是在grep
还是cut
。
答案 1 :(得分:0)
您可以轻松使用shell功能获得相同的结果,而不是将文件列表存储在变量中。有点奇怪的是,你将一个递归ls
弄平,只得到叶子,然后运行mkdir -p
,这实际上只有在父目录不存在时才有用,但如果你知道哪个深度你想要(例如当前目录和所有子目录下一级)你可以做这样的事情:
directories:
for path in ./*name* ./*/*name*; do \
mkdir "/some/path/$(basename "$path")" || exit 1; \
done
或even
find . -name '*name*' -exec mkdir "/some/path/$(basename {})" \;