Кроссплатформенные make-файлы для небольшого проекта на Haskell?

#haskell #cross-platform #makefile #cabal

#haskell #кроссплатформенный #makefile #заговор

Вопрос:

Недавно я создал небольшую однофайловую утилиту Haskell, которая будет включена в раздел «инструменты» моего проекта на чистом PHP (я знаю, что это вызвало удивление).

Изначально я загрузил как исходный файл .hs, так и двоичный файл, сгенерированный на моей машине разработки Linux, в используемую нами систему контроля версий (Git). Но теперь, когда я больше думаю об этом, я хотел бы создать кроссплатформенные make-файлы в дополнение к нему, чтобы другие разработчики могли легко скомпилировать его в своих системах.

Существуют ли какие-либо рекомендации или, что еще лучше, шаблоны Makefile, которые я могу загрузить? Ничего особенного, просто что-то, что позволяет разработчикам указать некоторые подробности о своей настройке GHC и запустить простой скрипт для начала.

Ответ №1:

Рекомендуемый способ распространения ваших проектов на Haskell — использовать Cabal. Cabal — это одновременно система сборки и менеджер пакетов для кода на Haskell, и это упрощает сборку кода на Haskell на разных платформах, одновременно обрабатывая зависимости для вас.

Вот пример файла cabal:

 Name:           MyPackage
Version:        0.0
Cabal-Version:  >= 1.2
License:        BSD3
Author:         Angela Author
Synopsis:       Small package an utility program
Build-Type:     Simple

Executable myutility
  Build-Depends:  base
  Main-Is:        Main.hs
  Hs-Source-Dirs: src
  

Вы можете сгенерировать файл cabal в интерактивном режиме, выполнив

 $ cabal init
  

Затем Cabal задаст вам несколько простых вопросов и сгенерирует файл cabal на основе ваших ответов. Затем вы можете настроить этот файл в соответствии с вашими конкретными потребностями.


Чтобы установить свой пакет, просто запустите это в каталоге package

 $ cabal install
  

Вы также можете загрузить свой пакет в Hackage, стандартное хранилище пакетов Haskell. Таким образом, пользователи могут загрузить и установить ваш пакет (и любые зависимости) за один шаг с помощью команды

 $ cabal install mypackage
  

Также существуют инструменты для преобразования пакетов Cabal в другие менеджеры пакетов, если вы не хотите требовать от своих пользователей установки Cabal (хотя Cabal включен в платформу Haskell).

Он также хорошо сочетается с Haddock для создания справочной документации для вашего пакета. Ознакомьтесь с некоторыми пакетами на Hackage для примера результатов.

В настоящее время также ведется работа по улучшению поддержки наборов тестов в Cabal.

В целом, эти и многие другие причины делают использование Cabal очень выгодным для организации, сборки и распространения ваших проектов на Haskell.

Комментарии:

1. Спасибо! Cabal — идеальное решение для этого, и оно работало «из коробки» как в Linux, так и в Windows. Предоставленный вами шаблон cabal очень помог, мне просто пришлось сменить HUnit на base.

2. Обратите внимание, что вы также можете использовать cabal init для создания пустого проекта. Наконец, cabal это часть платформы Haskell , поэтому она будет на всех ваших компьютерах, если вы используете дистрибутив core.

Ответ №2:

Если вы можете позволить себе другую зависимость, попробуйте cabal. Это система сборки, специально разработанная для Haskell.