2010-12-10 61 views
10

我正在尝试编写一个基本的makefile,它将多个js文件组合成一个文件,然后执行相同的操作,但压缩它们。Makefile结合js文件并制作压缩版本

到目前为止,我有这个可以使压缩版本罚款。

# Set the source directory 
srcdir = src/ 

# Create the list of modules 
modules = ${srcdir}core.js\ 
      ${srcdir}sizzle.js\ 
      ${srcdir}json2.js\ 
      ${srcdir}ajax.js\ 
      ${srcdir}attribute.js\ 
      ${srcdir}content.js\ 
      ${srcdir}cookie.js\ 
      ${srcdir}css.js\ 
      ${srcdir}event.js\ 
      ${srcdir}json.js\ 
      ${srcdir}location.js\ 
      ${srcdir}opacity.js\ 
      ${srcdir}ready.js\ 
      ${srcdir}size.js\ 
      ${srcdir}init.js 

# Compress all of the modules into spark.js 
spark.js: ${modules} 
    java -jar yuicompressor.jar -o [email protected] $^ 

有没有人知道我会如何去添加一个名为spark-dev.js的未压缩版本?我一直在试图使用猫,但我并没有走得很远。这是我写过的第一个makefile。

编辑 我想这个代码与猫

spark-dev.js: ${modules} 
    cat [email protected] $^ 
+0

具体来说,您是如何尝试使用猫的?哪里出了问题? – slowdog 2010-12-10 22:43:28

+0

@slowdog我已经把我在编辑中试过的代码。 – Olical 2010-12-10 22:47:59

+0

@slowdog呵呵,至于出了什么问题,它回显了所有打印文件的内容:'make:*** [spark-dev.js]错误1' – Olical 2010-12-10 22:50:04

回答

9

你几乎没有:-)这应该工作:

spark-dev.js: ${modules} 
    cat > [email protected] $^ 

背景:cat功能是(尝试)打开其命令行上列出的所有文件,并将内容转储到stdout。 > [email protected]语法被shell理解为“创建文件[email protected],并将此命令的stdout连接到它”,所以现在我们最终将$^的内容合并到[email protected]中。

+0

嗯,停止它打印内容,但它现在抛出这个错误:'makefile:23:***缺少分隔符。停止。' – Olical 2010-12-10 23:05:46

+0

确保在'cat'命令行的开始处有一个制表符,而不是空格。复制生成文件碎片进出浏览器是一件痛苦的事情,因为制表符往往会奇迹般地变成空格... – slowdog 2010-12-10 23:08:23

+0

好吧,现在它正在工作,但只执行第一个命令,是否有执行两者的方法? – Olical 2010-12-10 23:10:55