如何将命令行选项传递给Cabal中的Alex

Joh*_*ler 5 haskell cabal alex

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

但是,如果没有-g选项指示Alex创建文件的GHC优化版本,它就会这样做.与GHC一起使用时,此选项表示扫描速度提高了10倍,编译速度也快了一个数量级.

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

kos*_*kus 5

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 _ = []
Run Code Online (Sandbox Code Playgroud)

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

  • 我在寻找Happy的相同答案时遇到了这个问题,并发现Cabal还会根据Happy手册的建议自动为所有Happy调用提供`-a -g -c`. (2认同)