2015-09-22 38 views
0

我正在使用make进行前端开发。例如,我的问题可能会更好地解释。随着npm,我可以在我的package.json扩展make命令

"html_dev": "jade --pretty --hierarchy ./src-dir --out ./dev-dir", 
"html_watch": "npm run html:dev -- --watch" 

这意思是,html_watch是基本相同html_dev通过添加--watch标志。好处很明显:更改html_dev,并自动获取html_watch中的更改。

然而,随着make我有没有这样的运气,似乎需要重复的命令:使用变量

html_dev: 
    jade --pretty --hierarchy ./src-dir --out ./dev-dir 
html_watch: 
    jade --pretty --hierarchy ./src-dir --out ./dev-dir --watch 

我可以解决此问题:

htm_dev_command := jade --pretty --hierarchy ./src-dir --out ./dev-dir 

html_dev: 
    $(html_dev_command) 
html_watch: 
    $(html_dev_command) --watch 

这工作,但会变得很难看,因为我有一堆我想要扩展的命令。

有没有办法做到这一点?

回答

1

是的,你想要Phony TargetsTarget-specific Variables

您可以使用变量作为命令的参数,然后将/ prepend附加到html_watch目标的目标特定变量中,该目标然后会列出html_dev作为其先决条件。

然后,html_dev的配方将使用该变量。

您也可以使用可扩展变量并通过目标名称加载变量。

common_ARGS := --pretty --hierarchy ./src-dir --out ./dev-dir 
html_watch_ARGS := --watch 

html_watch html_dev: 
    jade $(common_ARGS) $([email protected]_ARGS) 
在分配

或者包括$(common_ARGS)html_watch_ARGS(还可以指派html_dev_ARGS),然后只用在配方一个变量。

+0

这是有效的,但我宁愿不必使用变量来做到这一点。对我而言,它比具有各种命令的可读性差。 – user137369

+0

有没有办法避免这一点,让我可以想到。如果所有东西都建立在共同的参数之上,那么你可以用'$(EXTRA_ARGS)'写出完整的命令编写一个'html_dev'目标,然后在每个扩展命令中使用'EXTRA_ARGS:= ....'if这对你更好。 'npm'是否允许每个“目标”有任意数量的命令?如果是的话,它是如何处理这个问题并添加参数的? (这就是为什么'make'没有一个简洁的方法来做到这一点,它不知道在哪里添加参数。) –