如何将CPPFLAGS和LDFLAGS添加到我的cabal文件中?

时间:2014-05-27 11:58:44

标签: haskell cabal

我似乎无法成功地在项目上运行cabal install,因为它具有text-icu包的依赖关系,它需要在系统上安装icu4c库。

我使用icu4c在我的Mac上安装了brew install icu4c

但是cabal install text-icu仍然不起作用,因为brew install icu4c将库安装在cabal构建系统无法找到它的位置。 brew info icu4c给了我这些特别说明:

This formula is keg-only, so it was not symlinked into /usr/local.

...

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/icu4c/lib
    CPPFLAGS: -I/usr/local/opt/icu4c/include

所以我需要告诉cabal关于这些LDFLAGS和CPPFLAGS。我如何在我的cabal文件中执行此操作?

修改

brew link icu4c --force似乎解决了这个问题。但我仍然想知道原问题的答案。

1 个答案:

答案 0 :(得分:1)

Homebrew为CPPFLAGS提供了一个目录,为LDFLAGS提供了另一个目录。我们需要将Haskell构建系统指向这些目录,以便它可以找到要包含的相应头文件以及要链接的相应库。

指向那些路径的阴谋

您可以使用一些选项标记将所需信息传递给cabal install,如下所示:

cabal install \
    --extra-include-dirs=THAT_CPPFLAGS_DIR \
    --extra-lib-dirs=THAT_LDFLAGS_DIR \
    …

如果要提供多个目录,可以重复--extra-XXX-dirs标志逐个构建目录列表。

在这些路径上指向堆栈

如果您正在使用堆栈,那么您可以在~/.stack/config.yml中添加这些选项作为用户配置的一部分,方法如下:

extra-include-dirs:
- /usr/local/opt/openssl/include
- /usr/local/opt/icu4c/include
extra-lib-dirs:
- /usr/local/opt/openssl/lib
- /usr/local/opt/icu4c/lib

这将适用于您stack build作为该用户的所有内容,而无需在每个命令调用时使用标记。