如何在本机nodejs插件中使用环境变量作为编译时常量?

时间:2017-03-28 10:21:48

标签: c++ node.js environment-variables node-gyp

我正在为NodeJS编写一个原生插件。如何在编译时将环境变量用作常量?也就是说,"注入"来自node-gyp buildnpm install期间设置的环境变量的NodeJS C ++插件的常量。我发现this answer,但据我所知,没有将变量传递给node-gyp的等效选项

2 个答案:

答案 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文件。