簡體   English   中英

如何在不安裝的情況下編譯 haskell package?

[英]How to compile a haskell package without installation?

https://github.com/koalaman/shellcheck

我可以使用cabal install安裝上述 package 。 但我想運行原始ghc命令來編譯二進制文件而無需安裝。

有人可以告訴我怎么做嗎?

這是通常的方法。 第一步是獲取代碼的副本。 這兩個之一將做到這一點:

% git clone https://github.com/koalaman/shellcheck
% cabal unpack shellcheck

進入包含代碼的目錄后,您可以使用build命令而不是install命令讓cabal構建它而不安裝它。

% cabal build

如果您想查看cabal為此任務調用的子命令序列,可以通過增加詳細程度來要求它顯示它們。

% cabal build -v3

首先,您需要安裝所有依賴項,您可以使用cabal install --dependencies-only來完成。 然后您需要使用以下內容創建文件Paths_ShellCheck.hs

module Paths_ShellCheck where
import Data.Version
version = Version [0,7,2] []

然后你可以使用這個 GHC 命令:

ghc \
  --make \
  -O \
  -package-db ~/.cabal/store/ghc-8.10.4/package.db \
  -hide-all-packages \
  -package regex-tdfa \
  -package parsec \
  -package containers \
  -package base \
  -package deepseq \
  -package mtl \
  -package QuickCheck \
  -package array \
  -package aeson \
  -package bytestring \
  -package Diff \
  -package filepath \
  -package directory \
  src/ShellCheck/*.hs \
  src/ShellCheck/*/*.hs \
  Paths_ShellCheck.hs \
  shellcheck.hs

這將構建可執行的shellcheck 請注意,這是專門針對 GHC 8.10.4 的,如果您想使用另一個 GHC 版本,可以更改它。

如果您甚至不想運行cabal install --dependencies-only那么最簡單的方法可能是復制所有依賴項的所有 *.hs 源文件,將它們添加到最后的 glob,然后刪除相應的-package...參數。 您也許可以保留與 GHC 捆綁在一起的包:即 base、deepseq、mtl、containers、array、bytestring、filepath、parsec 和 directory。 這樣就剩下了 Diff、aeson、QuickCheck 和 regex-tdfa 以及它們的傳遞依賴關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM