在Makefile

时间:2016-09-06 14:56:33

标签: linux bash makefile substitution xargs

我有一个来自an earlier question I asked的工作解决方案,用于在源目录(/ foo / source)中查找csv文件,使用tail切断前233行,并将其保存到不同目录中的文件(/富/ DEST):

find /foo/source -name "*.csv" | xargs -I '{}' sh -c 'tail -n +232 {} > /foo/dest/$(basename {})'

这在bash中按原样运行时效果很好。

我的问题是Makefile目标中完全相同的命令失败:

copyfiles:
    find /foo/source -name "*.csv" | xargs -I '{}' sh -c 'tail -n +232 {} > /foo/dest/$(basename {})'

make copyfiles
  

sh:/foo/dest//foo.source/somecsv.csv:没有这样的文件或目录

在Make中,似乎basename命令不再有效,因为它在保存时只使用源文件的整个路径+文件名。

为什么会发生这种情况,有没有解决方法呢?有没有更简单的方法来实现我的目标?我需要在文件夹中搜索csv文件,尾部,然后保存到其他位置。

谢谢!

1 个答案:

答案 0 :(得分:1)

感谢@ 123的提示,我设法回答了我的问题:使用$$(basename {})