使用GNU Make,如何将多个文件合并为一个?

时间:2014-10-24 18:38:01

标签: makefile

我有一些SQL文件,我想用sed处理并连接成一个文件。使用单个GNU Make配方是否有一种灵活的方法可以做到这一点?

如果我在编写Makefile时知道文件集,我可以写一个多行配方。

combined.sql: main.sql table1.sql table2.sql
    sed -e 's/latin1/utf8/' main.sql > $@
    sed -e 's/latin1/utf8/' table1.sql >> $@
    sed -e 's/latin1/utf8/' table2.sql >> $@

这似乎过于重复,如果我有一个动态生成的输入文件列表,也将无法使用。我怎么能以最小冗余的方式很好地做到这一点,可以扩展到任意数量的输入文件?

2 个答案:

答案 0 :(得分:5)

使用automatic variable表示您的先决条件以及sed随意获取大量输入文件的事实:

combined.sql: main.sql table1.sql table2.sql
    sed -e 's/latin1/utf8/' $^ > $@

对于不接受多个文件输入的工具的一般情况,您仍然可以在shell循环中使用$^

combined.sql: main.sql table1.sql table2.sql
    for file in $^; do \
        some_other_tool $$file; \
    done > $@

答案 1 :(得分:1)

怎么样:

cat *.sql | sed -e 's/latin1/utf8/' > output.sql

你可以在shell脚本中使用文件名参数等。如果你愿意的话。