Как передать флаг C ++ 11 до "npm install"? - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь установить пакет "opencv4 nodejs" на MA C, выполнив эту команду:

CXXFLAGS=-std=gnu++11 npm i -g opencv4nodejs

Это дает мне следующую ошибку:

/usr/local/lib/node_modules/opencv4nodejs/node_modules/opencv-build/opencv/opencv/modules/highgui/src/window_cocoa.mm:269:25: error: non-constant-expression cannot be narrowed from type 'int' to 'CGFloat' (aka 'double') in initializer list [-Wc++11-narrowing]
        NSSize size = { width, height };
                        ^~~~~
/usr/local/lib/node_modules/opencv4nodejs/node_modules/opencv-build/opencv/opencv/modules/highgui/src/window_cocoa.mm:269:25: note: insert an explicit cast to silence this issue
        NSSize size = { width, height };
                        ^~~~~
                        static_cast<CGFloat>( )
/usr/local/lib/node_modules/opencv4nodejs/node_modules/opencv-build/opencv/opencv/modules/highgui/src/window_cocoa.mm:269:32: error: non-constant-expression cannot be narrowed from type 'int' to 'CGFloat' (aka 'double') in initializer list [-Wc++11-narrowing]
        NSSize size = { width, height };
                               ^~~~~~
/usr/local/lib/node_modules/opencv4nodejs/node_modules/opencv-build/opencv/opencv/modules/highgui/src/window_cocoa.mm:269:32: note: insert an explicit cast to silence this issue
        NSSize size = { width, height };
                               ^~~~~~
                               static_cast<CGFloat>( )

Я нашел этот ответ, который говорит о флаге -Wno-c++11-narrowing, чтобы игнорировать эту ошибку.

Проблема в том, что я не могу понять, как передать этот флаг в npm command.

Я пробовал: CXXFLAGS=-std=c++11=-Wno-c++11-narrowing npm i -g opencv4nodejs безуспешно.

Как передать этот флаг C ++ команде npm?

1 Ответ

0 голосов
/ 09 февраля 2020

Команда CXXFLAGS=-std=c++11=-Wno-c++11-narrowing npm i -g opencv4nodejs устанавливает для переменной CXXFLAGS значение "-std = c ++ 11 = -Wno-c ++ 11-сужение" и запускает команду npm.

Но вы не на самом деле не нужно, чтобы опция компилятора -std была установлена ​​в «с ++ 11 = -Wno-c ++ 11-сужение» - вам действительно нужны два параметра, разделенных пробелом.

Проблема в том, что вы не может просто вставлять пробел, потому что CXXFLAGS=-std=c++11 -Wno-c++11-narrowing ... пытается запустить команду с именем "-Wno-c ++ 11-сужение".

Решение состоит в том, чтобы выйти из пробела с обратной косой чертой sh, поэтому что оболочка не интерпретирует его как разделитель между переменной и командой.

Что вам действительно нужно:

CXXFLAGS=-std=c++11\ -Wno-c++11-narrowing npm i -g opencv4nodejs
...