如何在本机 nodejs 插件中使用环境变量作为编译时常量?
How can I use environment variable as compile-time constant in native nodejs addon?
我正在为 NodeJS 编写本机插件。如何在编译时将环境变量用作常量?也就是说,"inject" 从 node-gyp build
或 npm install
期间设置的环境变量到 NodeJS C++ 插件的常量。我找到了 this answer,但是据我所知,没有将变量传递给 node-gyp
的等效选项
通常当您自己创建 Makefile 时,您可以将选项传递给编译器,例如:
-D name=definition
这相当于在源代码中有这个:
#define name "definition"
所以使用:
-D NAME=$NAME
会将 NAME
环境变量作为 NAME
常量放入已编译的源代码中。
但是 node-gyp
会为您生成 Makefile,请参阅:
您可能需要在 运行:
之后更改生成的 Makefile
node-gyp configure
但在你之前 运行:
node-gyp build
或者您可以制作一个简单的库,其全部目的是定义一个给定的值,供您的 Node 插件使用。
另一种选择是使用一个脚本来执行如下操作:
echo "#define NAME \"$NAME\"" > config.h
然后您可以通过您的 Node 本机插件或任何其他用 C 或 C++ 编写的代码包含 config.h
文件。
我发现 binding.gyp 中的 defines
块和变量扩展将实现我所追求的目标:
{
"targets": [
{
"target_name": "targetName",
"sources": [ "source.cc" ],
"defines": [
'MY_DEFINE="<!(echo $MY_ENV_VAR)"'
]
}
]
}
然后 MY_DEFINE
可用,其值等于编译时设置的任何 MY_ENV_VAR
。
我正在为 NodeJS 编写本机插件。如何在编译时将环境变量用作常量?也就是说,"inject" 从 node-gyp build
或 npm install
期间设置的环境变量到 NodeJS C++ 插件的常量。我找到了 this answer,但是据我所知,没有将变量传递给 node-gyp
通常当您自己创建 Makefile 时,您可以将选项传递给编译器,例如:
-D name=definition
这相当于在源代码中有这个:
#define name "definition"
所以使用:
-D NAME=$NAME
会将 NAME
环境变量作为 NAME
常量放入已编译的源代码中。
但是 node-gyp
会为您生成 Makefile,请参阅:
您可能需要在 运行:
之后更改生成的 Makefilenode-gyp configure
但在你之前 运行:
node-gyp build
或者您可以制作一个简单的库,其全部目的是定义一个给定的值,供您的 Node 插件使用。
另一种选择是使用一个脚本来执行如下操作:
echo "#define NAME \"$NAME\"" > config.h
然后您可以通过您的 Node 本机插件或任何其他用 C 或 C++ 编写的代码包含 config.h
文件。
我发现 binding.gyp 中的 defines
块和变量扩展将实现我所追求的目标:
{
"targets": [
{
"target_name": "targetName",
"sources": [ "source.cc" ],
"defines": [
'MY_DEFINE="<!(echo $MY_ENV_VAR)"'
]
}
]
}
然后 MY_DEFINE
可用,其值等于编译时设置的任何 MY_ENV_VAR
。