2015-09-16 1 views
1

Я работаю над Makefile и попытался связаться с watchman. Вот содержание Makefile на данный момент:watchman: не подключайте файлы, соответствующие файлам, в триггере

compile: 
    elm-make app/Main.elm 

watch: 
    watchman watch `pwd`/app 
    watchman trigger -- `pwd` compile 'app/*.elm' -- make compile 

Проблема здесь состоит в том, что, когда смотрел файл изменен, скажем Other.elm, исполняемая команда make compile Other.elm.

Правильно, но make Other.elm не соответствует чему-либо в Makefile, поэтому у меня есть ошибка в файле журнала сторожевого таймера.

Как я могу не принимать во внимание согласованный файл в запущенной команде? Может ли это быть сделано только с опциями CLI, а не с использованием watchman -j?

+0

Вы хотите, чтобы сторож выполнял команду 'make compile'? Или вы хотите, чтобы Make игнорировал «Other.elm»? – Beta

+0

Я хочу, чтобы он выполнял команду точно «make compile». –

ответ

1

Прошу прощения, что документы не очень понятны. Что вам нужно сделать, так это использовать расширенный синтаксис триггера для регистрации триггера. Вы должны использовать опцию -j, чтобы иметь возможность передавать в представлении JSON команды:

watchman -j <<-EOT 
["trigger", "`pwd`", { 
    "name": "compile", 
    "expression": ["match", "elm/*.elm", "wholename"], 
    "command": ["make", "compile"], 
    "append_files": false 
}] 
EOT 

https://facebook.github.io/watchman/docs/cmd/trigger.html#extended-syntax имеет больше информации о расширенном синтаксисе. Важной частью этого является бит append_files.

Вам нужно будет найти способ выразить эту многострочную команду в своем Makefile; мой инстинкт - просто использовать символ продолжения строки в конце каждой строки, но я не дважды проверял документы.

Также обратите внимание, что вы можете использовать этот альтернативный синтаксис, чтобы поместить вызов в одну строку, если ваша оболочка 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 имеет немного больше фона на вызов.

+0

Я попробую сегодня, спасибо! –

+1

Watchman 4.1 поставляется с новым инструментом под названием [watchman-make] (https://facebook.github.io/watchman/docs/watchman-make.html), который должен сделать этот тип шаблона использования немного проще –