使用Cabal(Haskell)从环境变量控制GHC构建选项

问题描述 投票:7回答:2

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

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

haskell compilation environment-variables ghc cabal
2个回答
1
投票

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


0
投票

在cabal文件的顶层使用build-type: Configure

编写一个configure脚本(即名为“configure”的程序包顶层的shell脚本 - 它不必是autotools样式)。它应该读取环境变量并生成一个名为package.buildinfo的文件,其中“package”被适当地替换。

该文件的格式在cabal用户指南中理论上有描述。该文件应该只包含构建信息字段,如cabal用户指南的3.3.2.9节所述。即,build-dependsother-moduleshs-source-dirsdefault-extensionsother-extensionsextensionsbuild-tool-dependsbuild-toolsbuildableghc-optionsghc-prof-optionsghc-shared-optionsincludesinstall-includesinclude-dirsc-sourcescxx-sourcesasm-sourcescmm-sourcesjs-sourcesextra-librariesextra-ghci-librariesextra-bundled-librariesextra-lib-dirscc-optionscpp-optionscxx-optionsld-optionspkgconfig-dependsframeworksextra-frameworks-dirsmixins字段进入缩进部分。它们不需要缩进。这些将与您的cabal文件的library部分中的等效字段合并。 (“用户指南”描述了包含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

© www.soinside.com 2019 - 2024. All rights reserved.