扩展make命令

时间:2015-09-22 17:36:47

标签: node.js makefile npm

我正在使用make进行前端开发。我可以通过示例更好地解释我的问题。使用npm,我可以使用package.json

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

这意味着html_watchhtml_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 个答案:

答案 0 :(得分:1)

是的,您需要Phony TargetsTarget-specific Variables

您可以使用变量作为命令的参数,然后在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) $($@_ARGS)

或者在$(common_ARGS)的作业中包含html_watch_ARGS(并指定html_dev_ARGS),然后在配方中使用该变量。