我正在为NodeJS编写一个原生插件。如何在编译时将环境变量用作常量?也就是说,"注入"来自node-gyp build
或npm install
期间设置的环境变量的NodeJS C ++插件的常量。我发现this answer,但据我所知,没有将变量传递给node-gyp的等效选项
答案 0 :(得分:3)
我发现binding.gyp中的defines
块和变量扩展将实现我之后的目标:
{
"targets": [
{
"target_name": "targetName",
"sources": [ "source.cc" ],
"defines": [
'MY_DEFINE="<!(echo $MY_ENV_VAR)"'
]
}
]
}
然后MY_DEFINE
可用,其值等于编译时设置的MY_ENV_VAR
集。
答案 1 :(得分:1)
通常,当您自己创建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
文件。