我喜欢用 stack build 进行构建时,应用程序的目标是真实 生产环境 服务器的URL,但是在使用 stack repl 进行调试时,应用程序会以测试服务器的URL为目标 .
stack build
stack repl
我想这可以通过条件编译来实现,但是如何配置堆栈以将选项如 -DDEBUG=1 传递给GHCi而不是GHC?
-DDEBUG=1
更一般地说,许多工具(Visual Studio,Xcode ...)支持项目的多个构建配置 . 是否有堆栈或cabal等价物?
一种方法是在运行时检查System.Environment.getProgName是 ghc . 这不一定是可靠的检查,因为在某些情况下可执行文件可以被称为其他内容 . 堆栈安装的可执行文件将是 ghc ,但对于系统安装的ghcs,它可能是 ghc-8.0.1 或其他东西 . 所以,这种方法并非完全可靠 .
ghc
ghc-8.0.1
我发现了一种更好的方法,即添加一个 .ghci 文件,其中包含ghci在启动时运行的命令 . 我没有对此进行测试,但我认为将 :set -DDEBUG=1 放在项目根目录中的 :set -DDEBUG=1 中会起作用 . 还需要使用 chmod go-w .ghci 调整其权限 .
.ghci
:set -DDEBUG=1
chmod go-w .ghci
1 回答
一种方法是在运行时检查System.Environment.getProgName是
ghc
. 这不一定是可靠的检查,因为在某些情况下可执行文件可以被称为其他内容 . 堆栈安装的可执行文件将是ghc
,但对于系统安装的ghcs,它可能是ghc-8.0.1
或其他东西 . 所以,这种方法并非完全可靠 .我发现了一种更好的方法,即添加一个
.ghci
文件,其中包含ghci在启动时运行的命令 . 我没有对此进行测试,但我认为将:set -DDEBUG=1
放在项目根目录中的:set -DDEBUG=1
中会起作用 . 还需要使用chmod go-w .ghci
调整其权限 .