Кабал устанавливает приливные концы с предупреждением - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь установить прилив в командной строке следующим образом:

cabal install tidal

, но заканчивается этим сообщением:

Предупреждение: вы спросили установить исполняемые файлы, но в target нет исполняемых файлов: tidal. Возможно, вы хотите использовать --lib для установки библиотек.

Возвращение:

cabal install tidal --lib

:

Разрешение зависимостей ... На сегодняшний день

Если я проверю список ghk-pkg, пакет не будет приливным ... У кого-нибудь похожая проблема или что я делаю неправильно?


Мой среда:

  • Windows 10 Образование
  • Haskell 8.4.3
  • Кабал 3.2.0.0
  • Гх c 8.10 .1

Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Как и Stack в течение более длительного времени, Cabal-install теперь (по состоянию на 3.2) на самом деле не устанавливает библиотеки больше - в смысле изменения состояния компьютера, чтобы GH C мог получить доступ к библиотека на нем . Оба инструмента теперь устанавливают только исполняемые файлы . Раньше это делалось также и для библиотек, но это было остановлено с текущими по умолчанию сборками в стиле Nix .

Теперь (и, на самом деле, уже ранее), способом использования вместо этого библиотека просто зависит от нее, и пусть Cabal выяснит, не нужно ли ее устанавливать. То есть вы добавляете файл .cabal в исходный файл .hs с build-depends: tidal. Затем, когда вы скажете cabal install ., она сначала загрузит и установит библиотеку, а затем использует ее для создания собственного исполняемого файла.


Конечно, и стек, и Cabal с технической точки зрения устанавливает библиотеки, просто они глобально не регистрируют их. То есть, Кабал знает, где он установил библиотеку, но вы не должны знать об этом. Это в духе непрерывной интеграции : если ваш код собирается сейчас с конкретным состоянием установленных библиотек, это не очень надежно. Если он собирается только с теми библиотеками, которые явно указаны в файле проекта, шансы намного выше, чем в будущем - вы (или кто-то еще) все еще сможете использовать ваш код на другом компьютере, не тратя часы на выяснение, какие библиотеки устанавливать первый.

0 голосов
/ 29 апреля 2020

cabal install --lib tidal не устанавливает двоичные файлы библиотеки в расположении, управляемом gh c -pkg . Двоичные файлы остаются в «хранилище» Cabal.

Для этого создается простой текстовый GH C файл среды пакета , который выбирается автономными вызовами gh c и ghci и сообщает им, где искать дополнительные библиотеки.

По умолчанию (, как упомянуто в документации ) этот файл среды пакета будет будет создан в ~/.ghc/$ARCH-$OS-$GHCVER/environments/default и будет выбран gh c и ghci вызовов, выполненных где угодно.

Мы также можем предоставить дополнительный параметр --package-env для создайте файл среды в локальной папке, который будет влиять только на вызовы gh c и ghci , сделанные в этой папке. Например:

cabal install --lib --package-env . tidal

сами проекты cabal игнорируют файлы среды, поскольку их среды пакетов создаются из раздела build-depends файла cabal для воспроизводимости. Но файлы окружения полезны для того, чтобы вообще не создавать кабальный проект, если он вам нужен только для игры с библиотекой в ​​ ghci или если вы компилируете простые программы, используя gh c только.

...