【发布时间】:2015-12-10 22:35:35
【问题描述】:
如果我有一个包含多个可执行文件的包,我最初使用cabal build 构建它。现在我更改了一个只影响一个可执行文件的文件,cabal 似乎需要大约一两秒来检查每个可执行文件以查看它是否受到影响。另一方面,make,给定相同数量的可执行文件和源文件,将在几分之一秒内确定需要重新编译的内容。为什么会有巨大的差异?有什么原因吗,cabal 不能只构建自己的 makefile 版本并从那里开始?
【问题讨论】:
-
请注意,虽然
make将始终重新编译任何依赖于已触摸文件的内容,但cabal build将不一定重新编译下游模块,如果您只更改文件中的一个函数。它以某种方式发现接口没有受到影响,并且重新链接文件就足够了(这通常比重新编译任何东西快得多)。顺便说一句,我认为我们应该谈论的实际上是ghc -make; cabal 只调用它来检查包中的依赖关系。