Не могу включитьзаголовок с использованием вывода nixos - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть простой код 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.

Есть идеи, что мне явно не хватает?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Кажется, что он работает нормально после исправления файла shell.nix и ввода приведенных ниже команд.Проблема с shell.nix заключалась в том, что он был излишне обернут в лямбду.Его параметры были затенены выражением 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
0 голосов
/ 05 февраля 2019

Следуя совету предыдущего ответа, я могу скомпилировать его с помощью:

#!/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.

Я быс удовольствием знаю, как это сделать.

...