#default #modularity #shake-build-system
#По умолчанию #модульность #встряхнуть-построить-систему
Вопрос:
Я хотел бы создать многоразовое Rules a
приложение, которое одновременно устанавливает некоторые правила, а также want
является целью по умолчанию, то есть чем-то, что должно быть создано, если пользователь не указал цель.
Проблема заключается в том, чтобы сделать его автономным и многоразовым. Например, я мог бы написать верхний main
уровень, который делает что-то вроде этого:
main :: IO () main = shakeArgsWith shakeOptions{ shakeFiles = outDir } flags $ flags targets -gt; pure $ Just $ do ... reusableRules ... want targets
Но это неправильно, так как это приведет к созданию как запрошенного пользователем, так targets
и по умолчанию targets
из reusableRules
.
В качестве альтернативы, я могу убедиться, main
что want
s будут отброшены, если targets
доступно:
main :: IO () main = shakeArgsWith shakeOptions{ shakeFiles = outDir } flags $ flags targets -gt; pure $ Just $ do (if null targets then id else rules -gt; want targets gt;gt; withoutAction rules) $ do ... reusableRules ...
Но для этого потребуется ввести пользовательский код main
. В качестве альтернативы я мог бы перейти targets
к reusableRules
тому, чтобы он мог обернуться в withoutActions
«если targets
null
«, но опять же, для этого требуется некоторый пользовательский код main
для вычисления targets
(что, если shakeArgs
вместо этого используется shakeArgsWith
?)
В идеале я хотел бы иметь возможность либо добавить цель по умолчанию, которая переопределяется командной строкой, либо использовать Rules
эффект, чтобы получить доступ reusableRules
к какому-либо «окружению targets
«. Возможно ли что-либо из этого?