Makefile中的复杂命令执行

Makefile中的复杂命令执行,makefile,gnu-make,makefile-project,multiple-makefiles,Makefile,Gnu Make,Makefile Project,Multiple Makefiles,我有一个关于在当前系统的makefile中执行复杂命令的查询 我目前正在makefile中使用shell命令来执行该命令。但是,我的命令失败了,因为它是许多命令的组合,执行时会收集大量数据。makefile内容如下所示: variable=$(shell ls -lart | grep name | cut -d/ -f2- ) directories: for path in ./*name* ./*/*name*; do \ mkdir "/

我有一个关于在当前系统的makefile中执行复杂命令的查询

我目前正在makefile中使用shell命令来执行该命令。但是,我的命令失败了,因为它是许多命令的组合,执行时会收集大量数据。makefile内容如下所示:

variable=$(shell ls -lart | grep name | cut -d/ -f2- )
directories:
        for path in ./*name* ./*/*name*; do \
                mkdir "/some/path/$(basename "$path")" || exit 1; \
        done
然而,
make
执行失败,execvp失败,因为文件列表很大,我需要解析所有文件

请给我建议克服这个问题的方法。基本上,我希望执行一个复杂的命令,并将该输出分配给一个makefile变量,我希望稍后在程序中使用该变量。

(这可能需要几次迭代。)

这看起来像是架构的限制,而不是Make限制。有几种方法可以解决这个问题,但是您必须向我们展示如何使用
变量
,否则即使您成功地构建了它,您也可能无法按照您的意愿使用它。请向我们展示您打算对
变量执行的确切操作

现在我建议你做几个实验,然后告诉我们结果。首先,用一个简短的文件列表(例如三个)尝试分配,以验证分配是否符合您的意愿。其次,在包含多个文件的目录中,请尝试:

variable=$(shell ls -lart | grep name)

要查看问题是在
grep
还是
cut

中,而不是将文件列表存储在变量中,您可以轻松使用shell功能获得相同的结果。有点奇怪的是,你将一个递归的
ls
展平,只得到叶子,然后运行
mkdir-p
,这只在父目录不存在的情况下才有用,但是如果你知道你想要的深度(例如当前目录和所有子目录向下一级),你可以这样做:

variable=$(shell ls -lart | grep name | cut -d/ -f2- )
directories:
        for path in ./*name* ./*/*name*; do \
                mkdir "/some/path/$(basename "$path")" || exit 1; \
        done


execvp
之后发布完整的错误消息,指出错误的原因。Make在列出文件时通常不会遇到任何问题,不管文件有多大,因为您的命令只会将输出传输到
grep
,然后传输到
cut
。我怀疑是某个命令的执行返回了一个错误。谢谢你的回复。。错误如下。。make make:execvp:/bin/bash:参数列表太长make:**[all]错误127 bash>!v1)当您给makefile一个小列表(可能是3个文件)时,它能工作吗?2) 赋值
变量
,或尝试使用
变量
时,Make是否失败?3) 如何使用
变量
?嗨,make文件只是在赋值后退出…为了避免递归执行,我修改了使用:=而不是=。。。。我计划在程序的后续各行中使用变量的结果。您能告诉我们如何使用
变量