在shake-0.9 和更低版本中,假目标是Shake 的一个弱点——你可以做到,但它们比应有的更加冗长和手动。这里有几个选项:
让安装规则生成一个文件
作为一个非常简单的解决方案,只需在规则writeFile' "install" ""
底部添加即可。install
这会产生一个虚拟文件,但每次mytarget
更改时都会重新运行。如果您希望它在每次install
请求时都运行(就像制作中的假货一样),只需添加alwaysRerun
. 如果可以忽略冗余文件,这是最简单的解决方案,直到有一流的假支持。
采用action
你可以写:
main = shake shakeOptions $ do
action $ do
need ["mytarget"]
system' "ln" ["-s", "mytarget", "linkname"]
这声明了在每个构建上运行的操作。实际上,您可能只希望install
在命令行上运行它,因此您可以执行以下操作:
main = do
args <- getArgs
shake shakeOptions $ do
when ("install" `elem` args) $ action $ do
... install code ...
采用shakeArguments
在之后的shake版本中可以使用该shakeArgsWith
函数编写:
main = shakeArgsWith shakeOptions [] $ \_ targets ->
if "clean" `elem` targets then do
removeFiles "_make" "//*"
return Nothing
else return $ Just $ do
when ("install" `elem` targets) $ do
... install code ...
... other rules ...
want $ delete "install" targets
这使您可以完全控制目标的处理方式,因此您可以做一些比虚假目标更强大的事情,但它的工作量更大。