【发布时间】:2014-03-23 21:27:37
【问题描述】:
我正在使用 Alex 3.0.5、Happy 1.18.10、Cabal 1.16.0.2
我有一个使用 Cabal 构建的小型编译器项目。我将编译器的内部作为库公开,所以我在公开的模块部分有 MyLangLex 和 MyLangPar。如果我删除 Alex 和 Happy 生成的 .hs 文件,然后运行 cabal configure,然后 cabal build 将首先运行 Alex 和 Happy,生成文件,然后继续构建,一切正常。但是,如果我不删除这些文件,Alex 和 Happy 要么不构建文件,要么没有将它们放在正确的位置。我觉得Happy跑了,因为我看到了Happy发来的信息;但是,当我查看应该生成的 .hs 文件时,它是不正确的(其中没有更改),我可以确定 Cabal 在构建中使用的 .hs 文件的版本是错误的一个,因为应该改变的行为没有。 IE。对 .y 文件的更改不会合并到构建的程序中,所以我怀疑在运行 Happy 时,Cabal 将此文件放在某个临时目录中,然后使用旧的 .hs 文件,该文件仍然存在于构建中.但我不确定。
是我的错误还是其中一个工具行为不端?
【问题讨论】:
-
也许这个答案是相关的? Using alex/happy with Cabal 无论如何,看看你的阴谋集团文件会很有帮助。
-
感谢您的评论。如果我删除 Lex.hs 和 Par.hs(这样我只有 Lex.x 和 Par.y),并且 cabal clean -> cabal configure -> cabal build - 构建失败。如果我在相应的文件上运行 alex 并高兴,则构建成功。此外,当我有一个平面目录时,构建曾经可以工作,但当我移动到分层结构时开始失败。词法分析器位于 src/Compiler/RSL/Syntax/Lex.x 中。 Lex.x 和 Par.y 中的模块头使用目录结构(例如,在 Lex.x 模块字段中,它是“module Compiler.RSL.Syntax.Lex where”)。我的阴谋集团文件是lpaste.net/107438
-
你找到答案了吗?我也很震惊 Cabal 将生成的文件转储到我的目录中,而不是将其与其他生成的文件一起保存在某个隐藏文件夹中。