是否可以使用 Cabal 构建 Haskell 项目并从环境变量控制 GHC 标志?
在我的 project.cabal 文件中有一个部分“GHC-Options”,它控制标志,但我想从命令行额外设置它们。
是否可以使用 Cabal 构建 Haskell 项目并从环境变量控制 GHC 标志?
在我的 project.cabal 文件中有一个部分“GHC-Options”,它控制标志,但我想从命令行额外设置它们。
如果你只有开/关标志,你应该使用Cabal flags。
build-type: Configure在您的 cabal 文件的顶层使用。
编写一个configure脚本(即一个名为“configure”的包顶层的shell 脚本——它不必是autotools 风格)。它应该读取环境变量并生成一个名为package .buildinfo 的文件,并适当地替换为“ package ”。
该文件的格式理论上在 cabal 用户指南中有描述。该文件应仅包含 cabal 用户指南第 3.3.2.9 节中所述的构建信息字段。即,build-depends, other-modules, hs-source-dirs, default-extensions, other-extensions, extensions, build-tool-depends, build-tools, buildable, ghc-options, ghc-prof-options, ghc-shared-options, includes, install-includes, include-dirs, c-sources, cxx-sources, , asm-sources, cmm-sources, js-sources, extra-libraries, extra-ghci-libraries, extra-bundled-libraries, extra-lib-dirs, cc-options, cpp-options, cxx-options, ld-options, pkgconfig-depends,frameworks和extra-frameworks-dirs进入mixins缩进部分的字段。它们不需要缩进。这些将与librarycabal 文件的一部分。(用户指南描述了包含executable部分的能力,但我现在不能让它们工作。)
因此,如果您希望代码中的字符串反映 的内容$PATH,请设置您的 cabal 文件并编写如下配置脚本:
#!/bin/bash
echo 'cpp-options: -DCOMPILE_TIME_PATH="'$PATH'"' > my-package.buildinfo
然后你可以写一个 .hs 文件
{-# LANGUAGE CPP #-}
module WhyNot where
compileTimePath :: String
compileTimePath = COMPILE_TIME_PATH
Cabal 用户指南:https ://www.haskell.org/cabal/users-guide/developing-packages.html