我正在编写一个Makefile,并在watchman上尝试了一下。以下是目前Makefile的内容:
compile:
elm-make app/Main.elm
watch:
watchman watch `pwd`/app
watchman trigger -- `pwd` compile 'app/*.elm' -- make compile这里的问题是,当一个被监视的文件被更改时,执行的命令是make compile Other.elm。
make compile是正确的,但是make Other.elm不对应Makefile中的任何内容,所以我在watchman日志文件中有一个错误。
我怎么能不考虑触发的命令中匹配的文件呢?是否只能使用命令行界面选项,而不能使用watchman -j?
发布于 2015-09-17 13:02:27
很抱歉文档不是很清楚。您需要做的是使用扩展触发器语法来注册触发器。您必须使用JSON选项才能传入命令的-j表示:
watchman -j <<-EOT
["trigger", "`pwd`", {
"name": "compile",
"expression": ["match", "elm/*.elm", "wholename"],
"command": ["make", "compile"],
"append_files": false
}]
EOThttps://facebook.github.io/watchman/docs/cmd/trigger.html#extended-syntax有更多关于扩展语法的信息。其中最重要的部分是append_files位。
您需要找到一种方法来表达Makefile中的多行命令;我的直觉是在每一行的末尾使用\行续行符,但是我没有仔细检查文档。
还要注意,如果您的shell是bash或zsh,则可以使用此替代语法将调用放在一行中。这是我手工输入的,很可能把引号(!)弄乱了:
watchman -j <<< "[\"trigger\", \"`pwd`\", {\"name\": \"compile\", \"expression\":[\"match\", \"elm/*.elm\", \"wholename\"], \"command\": [\"make\", \"compile\"], \"append_files\": false}]"https://facebook.github.io/watchman/docs/cli-options.html#input-and-output有更多关于调用的背景知识。
https://stackoverflow.com/questions/32604406
复制相似问题