我使用$ nix-env -i boost
的nix包管理器安装了boost,但是当前一代的配置文件中没有提升标题。
因此~/.nix-profile/include/boost
不会退出,但可以在~/.nix-profile/lib
中找到提升库文件。
我在nix商店中搜索并在商店内的boost-dev
个文件夹中找到了标题。
为什么不将boost标题链接到我当前的一代?
答案 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。