Как да добавя CPPFLAGS и LDFLAGS към моя cabal файл?

Изглежда не мога да стартирам успешно 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. Как да направя това в моя cabal файл?

РЕДАКТИРАНЕ

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
Прав си, не искам да кодирам тези пътеки в моя cabal файл.   -  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