node-gyp 变量在通过命令行传递时表现不同

node-gyp variable behaves differently when passed through command line

我的 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目录失败?

好的,我自己通过查看Visual Studio中生成的.sln 找到了它。当我通过命令行传入变量时,生成的解决方案中缺少反斜杠:

/LIBPATH:"C:differentboostdirlib"

但是当我在使用它之前更改路径时,就像在变量声明中一样,它似乎可以正常工作。

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

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

然后使用以下代码定义库目录:

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

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

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