加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

ocaml – 如何正确使用nix-shell并避免“转储非常大的路径”?

发布时间:2020-12-15 21:49:14 所属栏目:安全 来源:网络整理
导读:根据我的读数(特别是 the wiki和 this blog post),我提出了以下使用nix-shell加载的default.nix: with import nixpkgs {};let emacs = emacsWithPackages (p : [ p.tuareg ]);instdenv.mkDerivation rec { name = "env"; src = ./.; # Customizable develop
根据我的读数(特别是 the wiki和 this blog post),我提出了以下使用nix-shell加载的default.nix:

with import <nixpkgs> {};

let emacs =
  emacsWithPackages (p : [ p.tuareg ]);
in

stdenv.mkDerivation rec {
    name = "env";

    src = ./.;

    # Customizable development requirements
    buildInputs = [
        pkgconfig
        ocaml
        ocamlPackages.merlin
        ocamlPackages.findlib
        ocamlPackages.lablgtk
        ocamlPackages.camlp5_transitional
        ncurses
        emacs
    ];

    # Customizable development shell setup
    shellHook = ''
        export PATH=`pwd`/bin:$PATH
    '';
}

但它总是打印一个警告:

warning: dumping very large path (> 256 MiB); this may run out of memory

加载需要很长时间(启动后第一次调用nix-shell约45秒,后续调用约2秒).

这条消息是什么意思?当我在Google上查找它时,我发现了一些GitHub问题,但没有以一种易于理解的方式表达.

我可以加快加载并删除此消息吗?在我看来,我做错了什么.

是否有关于编写这种我可能不知道的开发环境的一般性建议?

解决方法

可能src属性(当前目录)非常大. nix-shell会在每次调用时将其复制到Nix商店,这可能不是你想要/需要的.解决方法是写:

src = if lib.inNixShell then null else ./.;

(其中lib来自Nixpkgs).

这条路,./.将在您调用nix-build时复制,但在运行nix-shell时不会复制.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读