是否可以使用 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
缩进部分的字段。它们不需要缩进。这些将与library
cabal 文件的一部分。(用户指南描述了包含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