在nix包中设置标志

问题描述

我正在尝试将我的项目与静态openssl链接。我注意到openssl软件包https://github.com/NixOS/nixpkgs/blob/d6a12e8d9e0a4ac35ed401881e0d3160c764ac36/pkgs/development/libraries/openssl/default.nix#L5中有标志static,但我不知道在使用时如何设置它。 (pkgs.openssl ...?)。

当前,我使用pkgs.pkgsstatic.openssl解决”了它,但是它对gcc的形式产生了非常讨厌的副作用,并且其他不相关的依赖项被静态地重新编译(这是怎么回事?)。

如何在启用了静态标志的情况下使用openssl软件包?

解决方法

您可以使用override更改传递给程序包的参数。如果您只想构建静态openssl,就足够了:

pkgs.openssl.override {
    static = true;
}

要使用此自定义的openssl构建其他软件包,必须使用覆盖将其重新添加到nixpkgs中:

self: super: {
    openssl = super.openssl.override {
        static = true;
    };
}

此叠加层可以放置在~/.config/nixpkgs/overlays/openssl-static.nix中或添加到configuration.nix的{​​{1}}中。