我想知道推荐使用shake和ghc的方法 – 一起制作.在我的项目中,使用摇动规则将C源代码编译到他们的* .o文件(我称之为cobjects)中,并通过调用ghc –make将这些对象链接到我的
haskell程序中.在此命令期间,当需要重建我的haskell文件时,ghc会自行计算出来.
未正确编写以下示例以集成这两个工具.如果.hs文件发生更改,则重新运行shake脚本将不会重新调用ghc –make.我理解为什么摇动不知道重建,但我不知道推荐的修复.
main = shake shakeOptions $do
want [main_exe]
main_exe *> \out -> do
need cobjects
cmd "ghc --make" hs_compileFlags cobjects "main.hs"
cobjects **> ...
最佳答案 一般原则是,如果规则运行使用文件的命令,则它应该取决于文件.在您的情况下,您必须需要所有ghc –make请求,并且最简单的方法是使用ghc -M(生成Makefile):
main = shake shakeOptions $do
want [main_exe]
main_exe *> \out -> do
need cobjects
cmd "ghc -M" hs_compileFlags "main.hs"
cmd "ghc --make" hs_compileFlags cobjects "main.hs"
needMakefileDependencies "Makefile"
cobjects **> ...
needMakefileDependencies函数位于Development.Shake.Util中.唯一的细微之处在于我在运行命令后调用了needMakefileDependencies,否则目标文件还没有被创建(你可以通过自己使用parseMakefile过滤Makefile中的.hs文件来解决这个问题).