Nix boost安装错过了标头

时间:2017-04-15 11:05:01

标签: boost nix

我使用$ nix-env -i boost的nix包管理器安装了boost,但是当前一代的配置文件中没有提升标题。

因此~/.nix-profile/include/boost不会退出,但可以在~/.nix-profile/lib中找到提升库文件。

我在nix商店中搜索并在商店内的boost-dev个文件夹中找到了标题。

为什么不将boost标题链接到我当前的一代?

1 个答案:

答案 0 :(得分:2)

boost包是split package,因此它有多个输出。

$ nix-instantiate --eval -E '(import <nixpkgs> {}).boost.outputs'
[ "out" "dev" ]

在这种情况下,out输出具有库,dev输出具有标头。通常,使用dev时,nix-env -i输出未安装到用户环境中。但是当包是另一个包的构建依赖时,它在内部使用。

您可以看到将安装的输出如下:

$ nix-instantiate --eval -E 'builtins.toString (import <nixpkgs> {}).boost.meta.outputsToInstall'
"out"

文档表明,如果您想要其他输出,可以覆盖meta.outputsToInstall

我最好的尝试是:

nix-env -i -E \
  '_: with import <nixpkgs> {};' \
  'let newmeta = ( boost.meta // { outputsToInstall = ["out" "dev"]; } );' \
  'in boost // { meta = newmeta; }'

有兴趣听到一个不那么繁琐的版本......

我怀疑真正的答案是我们不应该尝试将开发内容安装到用户环境中。编写定义开发依赖关系的default.nix文件并使用nix-shell实例化它可能会更好。请参阅示例https://garbas.si/2015/reproducible-development-environments.html