【问题标题】:How to pass command-line options to Alex in Cabal如何将命令行选项传递给 Cabal 中的 Alex
【发布时间】:2014-01-13 20:29:25
【问题描述】:

在我当前的项目中,我有一个文件 Tokens.x,需要由 Alex 编译为 Tokens.hs。在我的.cabal 文件中,我在other-modules 部分列出了Tokenscabal build 愉快地创建了该文件。

但是,它在没有指示 Alex 创建文件的 GHC 优化版本的 -g 选项的情况下这样做。当与 GHC 一起使用时,此选项表示扫描速度提高了 10 倍,并且编译速度也提高了一个数量级。

如何告诉 cabal 在使用 GHC 编译时包含 -g 选项?

【问题讨论】:

    标签: haskell cabal alex


    【解决方案1】:

    AFAIK,使用 Cabal,您目前只能在配置文件中或通过命令行指定程序选项,但不能在 .cabal 文件中指定。

    关于这个有一个未解决的问题:https://github.com/haskell/cabal/issues/1223

    但是,查看Cabal 的来源,我发现您的特定问题似乎默认已解决。在Distribution.Simple.PreProcess,有:

    ppAlex :: BuildInfo -> LocalBuildInfo -> PreProcessor
    ppAlex _ lbi = pp { platformIndependent = True }
      where pp = standardPP lbi alexProgram (hcFlags hc)
            hc = compilerFlavor (compiler lbi)
            hcFlags GHC = ["-g"]
            hcFlags _ = []
    

    这意味着如果 Cabal 与 GHC 一起使用,那么 -g 在用作预处理器时会自动传递给 Alex。

    【讨论】:

    • 我在为 Happy 搜索相同的答案时遇到了这个问题,发现 Cabal 还按照 Happy 手册的建议自动为所有 Happy 调用提供 -a -g -c
    • 仅供参考,here 是传递给 Happy 和 Alex 的标志的源文件。正如@GabrielGonzalez 提到的,-agc 标志是自动传递的。
    猜你喜欢
    • 1970-01-01
    • 2017-01-16
    • 2016-11-05
    • 2015-10-13
    • 2019-05-17
    • 2013-09-28
    • 2010-11-30
    • 1970-01-01
    相关资源
    最近更新 更多