2017-02-22 2 views
1

У меня есть следующий переменный, определенная в моем файле 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 

Почему терпит неудачу, когда я прохожу в повышающем directoy с помощью командной строки?

ответ

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" 
Смежные вопросы