2013-07-25 44 views
1

变量这是我的makefile设置在化妆

file1: 
    uglifyjs myfile1.js -c | gzip -c -9 > myfile1.min.js 

file2: 
    uglifyjs myfile2.js -c | gzip -c -9 > myfile2.min.js 

我怎样才能改变我的makefile文件去除重复代码:

file1: 
    FILE=myfile1.js 
    #How to call build target? 

file2: 
    FILE=myfile2.js 

build: 
    uglifyjs $(FILE).js -c | gzip -c -9 > $(FILE).min.js 

我知道我可以使用make build但有另一种方式做这没有调用递归?

回答

1

使用自动变量:

file1 file2: 
     uglifyjs [email protected] -c | gzip -c -9 > [email protected] 

我不知道为什么你使用像file1目标时,你实际上正在构建的文件是myfile1.min.js。这不是一个好的makefile。

但是,这不是你问的问题。

+0

因为我的文件从'myfile.js'到'myfile.min.js',应该如何命名目标? 'myfile'?显然这是一个例子,但我宁愿尽可能地习惯。 – Alan

+0

您的目标应该_always_是您正在创建的文件。如果不是,那么每次运行make时都会重建该文件(因为就其所关注的文件而言,它不存在的文件已过期)。如果你只是想让这些命令总是运行,那么只需编写一个包含你的命令的shell脚本,而不用担心使用make。 – MadScientist

1

使用模式规则来运行命令,然后让你的目标依赖于文件,你想:

file1: myfile1.min.js 
file2: myfile2.min.js 

%.min.js: %.js 
     uglifyjs $< -c | gzip -c -9 >[email protected] 

模式规则告诉make如何建立从一个名为.js文件.min.js文件,其他规则告诉它构建特定的文件。