2017-04-15 17 views
1

nixパッケージマネージャーを使用して$ nix-env -i boostでブーストをインストールしましたが、私の現在の世代のブーストヘッダーはありません。Nix boost install missesヘッダー

したがって、~/.nix-profile/include/boostは終了しませんが、ブーストライブラリファイルは~/.nix-profile/libにあります。

nixストアで検索し、ストア内のboost-devというフォルダにヘッダーがあります。

なぜブーストヘッダーを現在の世代にリンクしていないのですか?

+0

ライブラリをインストールするために 'nix-env -i'が使われたことは一度もありません。通常は実行可能ファイルに使われます。ヘッダーが現在の世代のプロファイルにないと言うと、正確にはどういう意味ですか?実行したコマンドを正確に表示して、期待される出力が何で、実際の出力が何であるかを言うことができますか?ヘッダーを期待通りにインストールする別のライブラリの例がありますか? –

+1

固有値、qt5、opencsg、qscintilla .... nix-envのこれらのパッケージで '-i'を使うと、〜/ .nix-profile /内にヘッダのシンボリックリンクが生成されます –

答えて

1

boostパッケージはsplit packageなので、複数の出力があります。この場合

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

out出力は、ライブラリを有し、そしてdev出力はヘッダを有します。 nix-env -iを使用すると、通常、devの出力はユーザー環境にインストールされません。しかし、パッケージが別のパッケージのビルド依存である場合は、内部的に使用されます。

あなたは次のようにインストールされますどのような出力を確認できます。

$ 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を参照してください。

+1

私の混乱は、 minixからfreebsdへ、netbsdからlinuxへ、msys2からcygwinへ、パッケージマネージャがpkgsrc、pkg、apt、rpm、dnfなどであるかどうかに関わらず、 "dev libraries"をインストールするのと同じ方法で "user libraries"をインストールします。パッケージ自体に "-dev"が付いている可能性があります。私はnixのことをするための「適切なやり方」を学びたいと思っています...しかし私のような人々のための最初の頭のスクラッチャーのビット –

関連する問題