Можно ли использовать 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, очень впечатляет.