以正确的顺序使用先决条件

时间:2011-11-14 21:43:54

标签: bash makefile

如何生成以数字顺序生成先决条件列表?我想做这样的事情:

cat file1 file2 file10 file11 file21 | script

当我在bash shell和Makefile中尝试这个时:

cat file* | script

文件用于文件10 file11 file1 file21 file2 这不是我想要的。在bash中我可以强制解决这个问题:

cat file{[0-9],[0-9][0-9]} 

和类似的技巧。但我不知道如何让make识别这些通配符选项,当我尝试在Makefile中添加这些变量时,我会遇到很多错误:

target: file{[0-9],[0-9][0-9]}
        cat $^ | script

显然我不想单独列出每个文件,我只展示了几个例子,有数百个,是的,还有差距。那么我如何获得一个很好的制作配方,它将以数字顺序很好地使用我的文件? (我可以将所有文件从[数字]重命名为0 [数字],但这似乎是躲避并避免问题!)

3 个答案:

答案 0 :(得分:1)

一种选择是使用

SHELL=/bin/bash

在makefile中。其他选项对我来说似乎有点复杂(($sort ...)不处理数字比较)。

答案 1 :(得分:1)

这可能对您有用:

# mkdir test
# cd test
# touch test{a,b}{9..11}.txt
# echo *
testa10.txt testa11.txt testa9.txt testb10.txt testb11.txt testb9.txt
# echo $(ls -v *)
testa9.txt testa10.txt testa11.txt testb9.txt testb10.txt testb11.txt
# echo testa*
testa10.txt testa11.txt testa9.txt
# echo $(ls -v testa*)
testa9.txt testa10.txt testa11.txt

答案 2 :(得分:0)

不是最优雅的解决方案,但使用:

cat file? file?? file??? | script    # add more file?'s as necessary

将达到你想要的效果。

作为奖励,它使你的命令看起来越来越绝望了。