Как мне добавить CPPFLAGS и LDFLAGS в мой файл клики?

Кажется, я не могу успешно запустить cabal install в своем проекте, потому что он имеет зависимость от пакета text-icu, для которого в системе должна быть установлена ​​библиотека icu4c.

Ну, я установил icu4c на свой Mac, используя brew install icu4c.

Но cabal install text-icu по-прежнему не работает, потому что brew install icu4c установил библиотеку в место, где система сборки клики не может ее найти. 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

Так что мне нужно рассказать клике об этих LDFLAGS и CPPFLAGS. Как мне сделать это в моем файле клики?

ИЗМЕНИТЬ

brew link icu4c --force похоже решает проблему. Но я все же хотел бы знать ответ на исходный вопрос.


person dan    schedule 27.05.2014    source источник
comment
Если вы хотите, чтобы это было в файле Cabal: работает ли это, когда вы используете ld-options и cc-options в разделах library или executable файла Cabal? Почему вы не хотите, чтобы это было в файле Cabal: поиск установленных пакетов зависит от ОС. Как это сделать альтернативно: вы пробовали поставить эти флаги самому cabal? (LDFLAGS=blah CPPFLAGS=blah cabal install text-icu?)   -  person    schedule 27.05.2014
comment
Вы правы, я не хочу жестко кодировать эти пути в моем файле клики.   -  person dan    schedule 27.05.2014
comment
--extra-include-dirs=PATH и --extra-lib-dirs=PATH?   -  person Yuras    schedule 27.05.2014
comment
Я установил его cabal install --extra-include-dirs=/usr/local/Cellar/icu4c/54.1/include --extra-lib-dirs=/usr/local/Cellar/icu4c/54.1/lib Обратите внимание, что оба флага должны быть указаны. @Yuras, это ваш ответ с успешной сборкой, подтверждающей его. Я не предлагал это в качестве ответа, так как вы предложили это первым.   -  person Obscaenvs    schedule 10.11.2014


Ответы (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 как этот пользователь, без необходимости возиться с флагами при каждом вызове команды.

person Jeremy W. Sherman    schedule 11.05.2016