如何在不安装的情况下编译haskell包?
我可以使用如何在不安装的情况下编译haskell包?,haskell,cabal,cabal-install,Haskell,Cabal,Cabal Install,我可以使用cabal install安装上述软件包。但是我想运行rawghc命令来编译二进制文件,而不需要安装 有人能告诉我怎么做吗?首先,您需要安装所有依赖项,您可以使用cabal安装来完成这一操作--仅依赖项。然后您需要创建一个包含以下内容的文件path\u ShellCheck.hs: module Paths_ShellCheck where import Data.Version version = Version [0,7,2] [] 然后可以使用此GHC命令: ghc \ -
cabal install
安装上述软件包。但是我想运行rawghc
命令来编译二进制文件,而不需要安装
有人能告诉我怎么做吗?首先,您需要安装所有依赖项,您可以使用
cabal安装来完成这一操作--仅依赖项
。然后您需要创建一个包含以下内容的文件path\u 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
它将生成可执行文件外壳检查
。请注意,这是专门针对GHC 8.10.4的,如果要使用另一个GHC版本,可以对其进行更改
如果您甚至不想运行
cabal install--dependencies only
,那么最简单的方法可能是复制所有依赖项的所有*.hs源文件,将它们添加到末尾的globs中,并删除相应的-package…
参数。您也许可以保留与GHC捆绑在一起的包:即base、deepseq、mtl、containers、array、bytestring、filepath、parsec和directory。这就剩下了Diff、aeson、QuickCheck和regex-tdfa以及它们的可传递依赖项。这里是通常的方法。第一步是获得代码的副本。这两种方法中的一种可以做到:
% git clone https://github.com/koalaman/shellcheck
% cabal unpack shellcheck
一旦您进入代码目录,您可以使用build
命令而不是install
命令,要求cabal
在不安装它的情况下构建它
% cabal build
如果您想查看cabal
为此任务调用的子命令序列,可以要求它通过增加详细程度来显示它们
% cabal build -v3
使用
cabalbuild-v3
,我看不到原始ghc命令,我只看到类似[2/23]编译ShellCheck.Regex(src/ShellCheck/Regex.hs,…)
。如何查看原始的ghc
命令?那些编译…
消息来自ghc
调用之后/期间,您需要向上滚动一点。@user1424739例如,第3148、3221和3694行是ghc
调用。您提到的每个ghc。如果ghc单独编译每个hs文件,我希望看到每个hs文件都有一个单独的ghc命令,而不是许多hs文件都有一个ghc命令。@user1424739好吧,你的期望是不正确的。这仍然是更基本命令的包装吗?ghc是否有类似于.c->.o->.bin的每个文件编译(如gcc),以便我可以编译每个文件并链接它们?ghc确实生成所有输入.hs文件的.o文件,您可以在生成这些文件后传递-c
选项以停止。您可以将.o文件作为输入传递给GHC,然后GHC将链接到最终的可执行文件中。