2017-10-12 160 views
4

我正在调用Web服务的haskell应用程序。我希望在构建stack build时,应用程序以实际生产服务器的URL为目标,但在使用stack repl进行调试时,应用程序将以测试服务器的URL为目标。使用haskell堆栈在生产环境和沙箱环境之间切换

我想这可以通过条件编译来实现,但是如何配置堆栈以将选项(如-DDEBUG=1)传递给GHCi而不是GHC?更一般地说,许多工具(Visual Studio,Xcode ...)支持项目的多个构建配置。是否有堆栈或cabal等效?

回答

3

一种方法是在运行时检查System.Environment.getProgName是否为ghc。这不一定是可靠的检查,因为可执行文件在某些​​情况下可能被称为别的。对于安装了堆栈的可执行文件,它将是ghc,但对于安装了ghcs的系统,很可能是ghc-8.0.1或其他东西。所以,这种方法并不全是可靠的。

我发现了一个更好的方法,那就是添加一个.ghci文件,其中包含ghci在启动时运行的命令。我没有测试过这个,但我认为它可以将:set -DDEBUG=1放在.ghci的项目根目录下。还需要使用chmod go-w .ghci来调整其权限。

+0

我不知道'.ghci'文件。我只是尝试了你的建议,它的工作原理。非常感谢你! – Pascal91