[英]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++ long
和int
都是 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.