Переменная 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"
Другие вопросы по тегам