不能使用 nixos 推导包含 <ncurses.h> header

Cannot include <ncurses.h> header using nixos derivation

我有这个简单的 C++ 代码:

#include <ncurses.h>
int main ()
{
    return 0;
}

我尝试用这个 shell.nix 文件构建

{stdenv , ncurses}:
with import <nixpkgs> {}; {
     testEnv = stdenv.mkDerivation {
       name = "helloTest";
       buildInputs = [stdenv ncurses];
     };
}

运行命令:

g++ main.cpp -lncurses -o main

我得到错误输出:

main.cpp:1:10: fatal error: ncurses.h: No such file or directory
#include <ncurses.h>
         ^~~~~~~~~~~

尽管我确实安装了 ncurses

$ locate ncurses.h
/nix/store/ffjl7aw7f0gjwv4gb4mgb0w49v5dhrkg-ncurses-6.0-20171125-dev/include/ncurses.h

目前我正在使用一个专用的 docker 容器来进行 C++ 构建。但我想避免那个,真的很尴尬,并正确使用nix系统。

知道我明显遗漏了什么吗?

根据之前回答的建议,我可以愉快地编译:

#!/usr/bin/env bash 
ncursesInclude="/nix/store/ffjl7aw7f0gjwv4gb4mgb0w49v5dhrkg-ncurses-6.0-20171125-dev/include/"
ncursesLib="/nix/store/54cwjh1lsmjpk2cbs43gw89w4zhk3ybb-ncurses-6.0-20171125/lib/"
g++ main.cpp -I$ncursesInclude -L$ncursesLib -lncurses -o main

但我觉得非常尴尬,需要有通往 nix 商店的具体路径。

我很乐意知道这样做的最佳方式。

修复 shell.nix 文件并输入以下命令后,它似乎工作正常。 shell.nix 的问题在于它被不必要地包裹在 lambda 中。它的参数无论如何都被 with; 表达式遮蔽了,所以你可以只删除外部 lambda。

$ cat shell.nix
with import <nixpkgs> {};
{
     testEnv = stdenv.mkDerivation {
       name = "helloTest";
       buildInputs = [stdenv ncurses];
     };
}
$ nix-shell

[nix-shell:~/tmp/so-54524324]$ g++ main.cpp -lncurses -o main

[nix-shell:~/tmp/so-54524324]$ ./main 

[nix-shell:~/tmp/so-54524324]$ echo $?
0