9

是否可以使用 Cabal 构建 Haskell 项目并从环境变量控制 GHC 标志?

在我的 project.cabal 文件中有一个部分“GHC-Options”,它控制标志,但我想从命令行额外设置它们。

4

2 回答 2

2

如果你只有开/关标志,你应该使用Cabal flags

于 2013-07-18T20:05:55.577 回答
2

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,frameworksextra-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

于 2019-04-06T11:19:24.807 回答