stack基础命令

stack new 项目名

创建一个项目

stack init

生成stack.yml文件

stack setup

这个命令会检查你的项目所需的 GHC(Glasgow Haskell Compiler)版本是否已安装。如果没有,它会自动下载并安装所需版本。这个命令通常在第一次设置项目时使用。

以下命令查询当前项目的ghc版本,而不是系统的ghc版本

1
stack exec -- ghc -v

查看系统ghc版本

1
ghc -v

显示为项目下载ghc,不加参数在系统存在ghc的情况下不会下载

1
stack setup --install-ghc

stack build

这个命令会根据 stack.yaml 文件中指定的依赖项构建项目。它会编译项目的源代码,并确保所有依赖都正确安装和编译。这个命令是实际构建项目的核心命令。

stack install

这个命令会将构建好的可执行文件安装到你的系统中,通常是放在 ~/.local/bin 目录下。它可以让你在命令行中直接调用项目生成的可执行文件,而不需要指定完整路径。

stack update

此命令会更新 Stack 的包索引,以确保你获取到最新的可用库和依赖项。这是获取新版本库和更新信息的好方法。

stack可执行文件的路径

stack build之后的可执行文件路径通常是.stack-work\install\x86_64-linux-tinfo6\8a029dbf41a1c3fcb35019c33e03ac25af5edc3e649d290045c7d445666bbf8b\9.6.5\bin,包含了一个随机字符串,而在配置Dockerfile的时候需要固定的路径,这时候可以通过以下方式解决

stack path –local-install-root

1
2
RUN EXEC_PATH=$(stack path --local-install-root)/bin && \
cp "$EXEC_PATH/recite" /tmp/recite # 假设可执行文件名为 recite

通过stack path --local-install-root找到目录并复制到/tmp下

stack build –copy-compiler-tool

该命令会将可执行文件复制一份到.stack/compiler-tools/x86_64-linux-tinfo6/ghc-9.6.5/bin/

stack run

根据 package.yaml 中的配置来运行项目的主模块,通常是定义在 executable 部分的模块。