我有这个简单的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
目前我使用了针对c专用docker
容器++的基础之上。但我想避免这种情况,真的很尴尬,并正确使用nix的系统。
任何想法,我显然缺少什么?
看来,它的工作原理固定shell.nix
文件并输入以下命令后罚款。与shell.nix
的问题是,这是不必要的包装在一个lambda。它的参数是由with;
表达反正阴影,所以你可以删除外的λ。
$ 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
继前一个答案,我可以编译hapilly与建议:
#!/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
但我觉得太笨拙需要有对尼克斯店具体路径。
我会很高兴地知道这样做的尼克斯方式。