繁体   English   中英

在 Visual Studio C++ 项目中自动更新 node-gyp 包含文件的路径

[英]Auto-update path to node-gyp include files in a Visual Studio C++ project

我正在尝试转换一个在 MacOS 和 Linux(特别是 Raspbian)上编译得很好的项目,以便它可以在 Windows 上编译。 (完整代码在这里: https : //github.com/kshetline/rpi-acu-rite-temperature

在经历了很多悲痛之后(就像我安装的 Node 12 在我不知情的情况下消失并被 Node 8 取代,在 Windows C++ longint都是 32 位的?真的!?)我终于制作了代码使用node-gyp和 Visual Studio 2019 进行编译,但 Visual Studio 设置以我不喜欢的方式固定到特定版本的 Node。

这是我的CppProperties.json文件:

{
  "configurations": [
    {
      "inheritEnvironments": [
        "msvc_x86"
      ],
      "name": "x86-Debug",
      "includePath": [
        "${env.INCLUDE}",
        "${env.LOCALAPPDATA}\\node-gyp\\Cache\\12.16.1\\include\\node\\**",
        "${workspaceRoot}\\**"
      ],
      "defines": [
        "WIN32",
        "_DEBUG",
        "NAPI_CPP_EXCEPTIONS",
        "UNICODE",
        "_UNICODE",
        "USE_FAKE_PIGPIO"
      ],
      "intelliSenseMode": "windows-msvc-x86"
    }
  ]
}

我不想在我的包含路径中放置特定版本的 Node,但我不知道如何在没有它的情况下使其工作。 我什至无法通过使用12.*12.**使其适用于特定的主要版本的 Node——通配符在那里似乎对我不起作用。

我看到没有 Windows 环境变量可以让我使用诸如${env.NODE_VERSION} ,而且AFAIK 也没有 VS 预定义变量可以处理这个问题。

我可以使用我自己的环境变量,但这必须手动更新,这是我试图避免的。

Visual Studio 是否有一种方法可以让我编写更新脚本,例如以某种方式执行命令node --version ,从输出中去除前导字母“v”,然后将结果放入环境变量中?

还有其他可能的解决方案吗?

更新:

我从通用命令行应用程序开始更改了我的 Visual Studio 项目的设置,并且配置的工作方式完全不同,根本没有CppProperties.json文件,但问题仍然基本相同——我现在有了$(LOCALAPPDATA)\\node-gyp\\Cache\\12.16.1\\include\\node改为进入配置对话框。

使用node-addon-api必须在编译时以 node 的精确版本为目标。

那是因为N-API本身是“版本化”的,(具有一位数的宏, NAPI_VERSION ,当前从 1 到 5,加上特殊值NAPI_VERSION_EXPERIMENTAL=2147483647

例如,如您所见,在N-API 版本矩阵中,版本 4 在节点 v10.16.0 中可用,但在一些较旧的 v10 版本中不可用。

该插件与 node.exe 是“复古链接的”(我不知道该技术的名称),并且该链接是“延迟加载”链接。 该技巧允许插件使用主机可执行文件中的N-API函数,即使它不是“node.exe”(因此使用win_delay_load_hook.cc )。

至于CppProperties.json文件,我的理解是它只被 Intellisence 使用,与编译时使用的头文件无关。

您可以使用configure命令的--target选项强制 node-gyp 使用特定版本的节点,与机器上安装的当前版本无关。

另一个有用的选项是--devdir ,它允许摆脱臭名昭著的(afaic) %localappdata%\\node-gyp\\Cache根目录。

所有 node-gyp 命令选项都在这里

请亲爱的 node/node_gyp/N-API 专家阅读本文,不要犹豫,指出/修复该答案中的错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM