如何在不安装的情况下编译haskell包?

问题描述

https://github.com/koalaman/shellcheck

我可以使用 cabal install 安装上述软件包。但我想运行原始 ghc 命令,无需安装即可编译二进制文件

有人能告诉我怎么做吗?

解决方法

首先,您需要安装所有依赖项,您可以使用 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 ... 参数。您或许可以保留与 GHC 捆绑的包:即 base、deepseq、mtl、容器、数组、字节串、文件路径、解析和目录。这样就剩下 Diff、aeson、QuickCheck 和 regex-tdfa 及其传递依赖项了。

,

这是通常的方式。第一步是获取代码的副本。这两个中的一个可以做到:

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

进入包含代码的目录后,您可以使用 cabal 命令而不是 build 命令要求 install 构建它而不安装它。

% cabal build

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

% cabal build -v3