在通过命令行传递时,node-gypvariables的行为有所不同

我在我的gyp文件中定义了以下variables(期望BASE_DIR始终作为命令行parameter passing):

'variables': { "BOOST_DIR": "<@(BASE_DIR)/../../opt/boost_1_63_0/stage/lib" }, 

我用它作为msbuild连接器的库path:

 "VCLinkerTool": { ... "AdditionalLibraryDirectories": [ "<@(BOOST_DIR)", ... ] } 

只要我只通过命令行通过BASE_DIR,这工作得很好。 但是当我想传递一个不同的BOOST_DIR时,链接器不再find我的库:

 node-gyp rebuild --BASE_DIR=... --BOOST_DIR=C:\different\boost\dir\lib 

为什么当我通过命令行传入boost directoy时会失败?

好的,通过在Visual Studio中查看生成的.sln来自己find它。 当我通过命令行传递variables时,生成的解决scheme中缺less反斜杠:

 /LIBPATH:"C:differentboostdirlib" 

但是当我在使用它之前改变path,就像在variables声明中一样,它似乎正常工作。

所以,我的解决方法是使用

 'variables': { "BOOST_DIR": "<@(BASE_DIR)/../../opt/boost_1_63_0/stage" }, 

然后使用下面的代码来定义库目录:

 "VCLinkerTool": { ... "AdditionalLibraryDirectories": [ "<@(BOOST_DIR)/lib", ... ] } 

就是这样:现在,.sln中的LIBPATH正确生成了:

 /LIBPATH:"C:\different\boost\dir\lib"