我似乎无法成功地在项目上运行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
似乎解决了这个问题。但我仍然想知道原问题的答案。
答案 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
作为该用户的所有内容,而无需在每个命令调用时使用标记。