Переменная node-gyp ведет себя по-разному при прохождении через командную строку
В моем файле GYP определена следующая переменная (предполагается, что BASE_DIR всегда передается в качестве аргумента командной строки):
'variables': {
"BOOST_DIR": "<@(BASE_DIR)/../../opt/boost_1_63_0/stage/lib"
},
и я использую его как путь к библиотеке для компоновщика msbuild:
"VCLinkerTool": {
...
"AdditionalLibraryDirectories": [
"<@(BOOST_DIR)",
...
]
}
Это прекрасно работает, пока я передаю только BASE_DIR через командную строку. Но когда я хочу передать другой BOOST_DIR, компоновщик больше не находит мою библиотеку:
node-gyp rebuild --BASE_DIR=... --BOOST_DIR=C:\different\boost\dir\lib
Почему происходит сбой, когда я передаю команду boost через командную строку?
1 ответ
ОК, сам узнал, посмотрев на сгенерированный.sln в Visual Studio. Когда я передаю переменную через командную строку, в сгенерированном решении отсутствуют обратные косые черты:
/LIBPATH:"C:differentboostdirlib"
но когда я изменяю путь перед его использованием, как в объявлении переменной, он, кажется, работает правильно.
Итак, мой обходной путь должен использовать
'variables': {
"BOOST_DIR": "<@(BASE_DIR)/../../opt/boost_1_63_0/stage"
},
а затем используйте следующий код для определения каталога библиотеки:
"VCLinkerTool": {
...
"AdditionalLibraryDirectories": [
"<@(BOOST_DIR)/lib",
...
]
}
и все: теперь LIBPATH в.sln генерируется правильно:
/LIBPATH:"C:\different\boost\dir\lib"