#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.