Можно ли использовать cmake для проектов Haskell?
Я планирую проект, написанный в Haskell, возможно, в C есть некоторые части. Для buildsystem я решил отказаться от общего выбора для программных программ Haskell, главным образом потому, что я хочу узнать, как работают программы на других языках.
Я слышал о CMake, и я думаю, что это довольно классный продукт. Хотя я не знаю, как его использовать, я хочу использовать CMake для этого проекта, чтобы узнать, как он работает. Google не раскрыл никаких фактов о том, как использовать cmake с haskell, и все учебные материалы, которые я прочитал, были довольно запутанными. Возможно ли, и если да, как это возможно, скомпилировать проект, написанный в Haskell, используя CMake?
Ответы
Ответ 1
Вы можете использовать CMake для создания приложений и библиотек Haskell. Для этого вам нужно будет дублировать большую часть того, что делает Cabal, что будет поучительным, но также и трудоемким.
Я бы рекомендовал использовать cabal build -v
, чтобы увидеть команды, выпущенные Cabal, а затем переписывая их в CMake-форму.
Или используйте CMake для вызова cabal по коду Haskell, который, вероятно, будет менее раздражать.
Ответ 2
Я написал простую оболочку cmake для пакетов cabal и поместил ее здесь:
http://bitbucket.org/arrowd/cmake-findcabal (используйте кнопку "получить источник", чтобы загрузить его).
Теперь он работает для меня в Windows и FreeBSD, но я все же планирую улучшить его позже. Я поставил это в ответ, чтобы люди могли найти его в google, как и я.
Ответ 3
В то время как вы, безусловно, можете создавать код Haskell напрямую, используя инструмент сборки общего назначения, результат гораздо сложнее поддерживать, гораздо труднее поделиться с сообществом и сложнее построить сверху, чем когда вы строите поверх Кабал.
Для buildsystem я решил отказаться от общего выбора для программных программ Haskell, главным образом потому, что я хочу узнать, как работают программы на других языках.
Я понимаю намерение этого заявления в том, что вы хотите увидеть все отдельные шаги процесса сборки, но прочитайте другой способ, избегая кабала, вы не видите, как создаются программы в Haskell, вы видите как больно перестраивать инструменты, предоставляемые сообществом.
Я бы порекомендовал делать то, что предложил Дон. Посмотрите на вывод cabal -v
для построения под вашим конкретным компилятором (возможно, ghc) и реплицируя эти шаги в CMake.
Но тогда, как только вы поймете шаги, я всерьез подумаю об этом и вернусь к Кабалу. Если только позволить ему решать проблемы поддержки нескольких компиляторов, платформ, управления пакетами и т.д. Таким образом, уменьшая хрупкость вашей системы сборки и упрощая пакет и совместную работу.
В том, что я не могу придумать ни один не-Cabal-построенный пакет или двоичный файл в активном использовании сообществом, отличным от самого ghc.
Я, однако, желаю вам удачи в вашем путешествии в недрах процесса сборки!
Ответ 4
Я перезаписал начальную работу @arrowdodger, в процессе исправления присутствующих паролей:
- Невозможно использовать из каталога in-project
cmake/
из-за жестко заданных путей
- Были некоторые вхождения переменных Fortran/CXX (что вызвало ошибочное поведение)
- Множество кода, не относящегося к Haskell, может быть удалено, другой код добавлен на основе более новых версий языковых файлов C/CXX, которые поставляются с CMake
Репозиторий можно найти по адресу:
https://github.com/kvanberendonck/cmake-haskell
Работаю красиво для меня, и скорость сборки, которую я могу получить из ninja
, очень впечатляет.