如何编译一个haskell软件包而不安装?

6tdlim6h  于 2022-11-14  发布在  其他
关注(0)|答案(2)|浏览(158)

https://github.com/koalaman/shellcheck
我可以使用cabal install安装上面的包。但是我想运行原始的ghc命令来编译二进制文件,而不需要安装。
我该怎么做呢?

f4t66c6m

f4t66c6m1#

下面是通常的方法。第一步是获得代码的副本。下面两个步骤中的一个将完成此操作:

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

一旦进入包含代码的目录,就可以使用build命令(而不是install命令)要求cabal构建代码,而不安装代码。

% cabal build

如果您想查看cabal为此任务调用的子命令序列,可以通过增加详细程度来要求它显示这些子命令。

% cabal build -v3
zzwlnbp8

zzwlnbp82#

首先你需要安装所有的依赖项,你可以用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源文件,将它们添加到最后的globs中,并删除相应的-package ...参数。即base、deepseq、mtl、containers、array、bytestring、filepath、parsec和directory。因此,剩下Diff、aeson、QuickCheck和regex-tdfa以及它们的可传递依赖项。

相关问题