Makefile的运行方式与shell命令不同?(使用cat时)



我正试图手动将运行的命令转换为Makefile目标,但我在使用cat时遇到了一个错误。我想我正在尝试打开文件"cat",而不是打开实际的文件cat。。。

queries.sql : clean
ls ./sql/**/*.sql | sort -V | while read fn ; do (cat "${fn}"; echo; echo) >> queries.sql; done
clean :
rm -f queries.sql;

单独运行ls命令效果很好,但使用Makefile,我只得到

cat: : No such file or directory
cat: : No such file or directory
cat: : No such file or directory
cat: : No such file or directory
cat: : No such file or directory
cat: : No such file or directory
...

我是一个新手,所以这可能很简单。此外,我相信有一种方法可以在没有cat的情况下做到这一点?

编辑:

哦,sql脚本的前缀是日期,即2020-01-02,所以我想保持文件名的排序,如ls -V所示。

这可能是目前关于make最常被问到的问题。

$字符是特殊的,因此如果要将$传递到shell,则必须使用$$对其进行转义。

所以cat "${fn}"必须在你的食谱中写为cat "$${fn}"

最新更新