我想知道摇晃的推荐使用方式和ghc --make
一起。在我的项目中,摇动规则用于将C源代码编译成它们的*.o
文件(我称之为 cobjects
),并且通过调用 ghc --make
将这些对象链接到我的 haskell 程序中。在此命令期间,ghc
自己计算出何时需要重建我的 haskell 文件。
下面的示例未正确编写以集成这两个工具。如果 .hs
文件更改然后重新运行 shake 脚本将不会重新调用 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 **> ...
最佳答案
一般原则是,如果规则运行使用文件的命令,则它应该依赖于该文件。在您的情况下,您必须需要
所有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 **> ...
needMakefileDependency
函数位于 Development.Shake.Util
中。唯一的微妙之处是我在运行命令之后调用 needMakefileDependency
,否则目标文件还不会被创建(您可以通过仅过滤 >.hs
文件在 Makefile
中使用 parseMakefile
自己)。
关于haskell - 我应该如何让 Shake 知道需要 'ghc --make' 来跟踪 haskell 文件的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21756380/