我正在使用make
进行前端开发。我可以通过示例更好地解释我的问题。使用npm
,我可以使用package.json
:
"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
这很有效,但是因为我有一些我想扩展的命令,所以会很快变得难看。
有办法做到这一点吗?
答案 0 :(得分:1)
是的,您需要Phony Targets和Target-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
),然后在配方中使用该变量。