- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有几个(独立的)文件需要相当长的时间来编译,所以我想我会尝试并行编译,根据 Don Stewart 的回答 here .
我按照指示 here 进行操作,所以我的 makefile 看起来像这样
quickbuild:
ghc --make MyProg.hs -o MyProg
depend:
ghc -M -dep-makefile makefile MyProg
# DO NOT DELETE: Beginning of Haskell dependencies
...
MyProg.o : MyProg.hs
MyProg.o : B.hi
MyProg.o : C.hi
...
# DO NOT DELETE: End of Haskell dependenciesghc
(注意:与 the docs 相反,GHC 似乎默认为“Makefile”而不是“makefile”,即使“makefile”存在。)
我的问题是:如何使快速构建依赖于任何自动生成依赖项(以便 make 实际上并行运行)?我尝试将“MyProg.o”添加到“quickbuild”的依赖项列表中,但是“make”(正确地)提示没有构建“B.hi”的规则。
最佳答案
我建议不要使用make
出于这种目的。
看看ghc-parmake及其问题,especially this one - GHC 有一个非常复杂的重新编译检查器,您无法使用 Makefile 进行复制(它可以检测例如您自己项目之外的包文件是否发生更改)。
您也不会从并行 make -j
获得较大的加速(实际上不 > 2)用于并行运行多个 GHC,因为启动多个 GHC 具有较高的启动开销,ghc --make
可以避免这种情况。特别是,每个新的 GHC 调用都必须解析和类型检查所有接口(interface) .hi
正在编译的模块的所有依赖项涉及的文件; ghc --make
缓存它们。
相反,请使用新的 ghc --make -j
GHC 7.8 - 它是真正的并行。
它会比你手动编写的 Makefile 更可靠、更省力,并且可以做 recompilation avoidance比 Make 更好地利用其文件时间戳。
<小时/>乍一看,这听起来像是 Haskell 的一个缺点,但事实上并非如此。在其他喜欢使用 make
的语言中对于构建,例如 C++,不可能注意到项目外部的文件何时发生更改;编译器本身有一个构建系统,如 ghc --make
允许注意到这一点。
关于haskell - 如何将 'make' 与 GHC 依赖项生成一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19545257/
我是一名优秀的程序员,十分优秀!