【发布时间】:2014-02-13 14:01:20
【问题描述】:
我想知道一起使用shake 和ghc --make 的推荐方式。在我的项目中,shake 规则用于将 C 源代码编译成它们的*.o 文件(我称之为cobjects),并且这些对象通过调用ghc --make 链接到我的haskell 程序中。在此命令期间,ghc 会自行确定何时需要重建我的 haskell 文件。
以下示例未正确编写以集成这两个工具。如果.hs 文件发生更改,则重新运行摇动脚本不会重新调用ghc --make。我明白为什么 Shake 不知道要重建,但我不知道推荐的修复方法。
main = shake shakeOptions $ do
want [main_exe]
main_exe *> \out -> do
need cobjects
cmd "ghc --make" hs_compileFlags cobjects "main.hs"
cobjects **> ...
【问题讨论】:
-
问题:当你说“当一个 .hs 文件发生变化时”——你的意思是“当
main.hschanges? or are there other .hs files involved? It seems to me that your rules formain_exe`应该在某处有needs "main.hs"。 -
不,我的意思是“当任何 .hs 文件更改时”。如果
main.hs未更改,但main.hs所依赖的另一个源文件foo.hs已更改,则ghc --make命令足够聪明,可以自行确定它必须重新编译main.hs以及任何其他依赖于@ 987654338@. -
部分答案可能是使用
ghc -M让 ghc 发出依赖信息——有关更多详细信息,请参阅 this。然后,您可以将其合并到needs语句中。 -
不要重新运行
ghc --make“当任何.hs 文件更改时”,您不想总是重新运行ghc --make吗?似乎有必要重新链接可执行文件,然后ghc --make也应该获取对 .hs 文件的任何更改。 -
是的,我一直想运行
ghc --make。它应该在(可能)执行cobjects的规则之后运行
标签: haskell shake-build-system