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

C++ 如何在本机nodejs插件中使用环境变量作为编译时常量?,c++,node.js,environment-variables,node-gyp,C++,Node.js,Environment Variables,Node Gyp,我正在为NodeJS编写一个本地插件。如何在编译时将环境变量用作常量?也就是说,在代码或 NPM安装< /COD>中,从环境变量中向NoDjs C++插件中注入常数。但是,我发现,就我所见,没有等效的选项可以将变量传递给节点gyp。通常,当您自己创建一个Makefile时,您可以将选项传递给编译器,如: -D name=definition 这相当于在源代码中包含以下内容: #define name "definition" 因此,使用: -D NAME=$NAME 将NAME环境变量作为

我正在为NodeJS编写一个本地插件。如何在编译时将环境变量用作常量?也就是说,在代码<节点GYP构建< /COD>或<代码> NPM安装< /COD>中,从环境变量中向NoDjs C++插件中注入常数。但是,我发现,就我所见,没有等效的选项可以将变量传递给节点gyp。通常,当您自己创建一个Makefile时,您可以将选项传递给编译器,如:

-D name=definition
这相当于在源代码中包含以下内容:

#define name "definition"
因此,使用:

-D NAME=$NAME
NAME
环境变量作为
NAME
常量放入编译的源代码中

但是使用
节点gyp
会为您生成生成文件,请参见:

运行以下命令后,您可能需要更改生成的Makefile:

node-gyp configure
但在你跑步之前:

node-gyp build
或者,您可以创建一个简单的库,其全部目的是定义一个给定的值,供您的节点插件使用

另一种选择是使用脚本执行以下操作:

echo "#define NAME \"$NAME\"" > config.h

,然后可以由你的节点原生插件或C++或C++中的任何其他代码(

>p>)包含<代码>配置文件.h <代码>文件。通常,当你自己创建一个Mag文件时,你可以将选项传递给编译器,比如:

-D name=definition
这相当于在源代码中包含以下内容:

#define name "definition"
因此,使用:

-D NAME=$NAME
NAME
环境变量作为
NAME
常量放入编译的源代码中

但是使用
节点gyp
会为您生成生成文件,请参见:

运行以下命令后,您可能需要更改生成的Makefile:

node-gyp configure
但在你跑步之前:

node-gyp build
或者,您可以创建一个简单的库,其全部目的是定义一个给定的值,供您的节点插件使用

另一种选择是使用脚本执行以下操作:

echo "#define NAME \"$NAME\"" > config.h

,然后可以由您的节点本机插件或任何其他用C或C++编写的代码包含<代码>配置文件.h >代码> .< /p> ,我发现<代码>定义了块和变量扩展绑定。GYP将实现我所追求的:

{
  "targets": [
    {
      "target_name": "targetName",
      "sources": [ "source.cc" ],
      "defines": [
        'MY_DEFINE="<!(echo $MY_ENV_VAR)"'
      ]
    }
  ]
}
{
“目标”:[
{
“目标名称”:“目标名称”,
“源”:[“source.cc”],
“定义”:[

'MY_DEFINE=“我发现binding.gyp中的
defines
块和变量扩展将实现我想要的:

{
  "targets": [
    {
      "target_name": "targetName",
      "sources": [ "source.cc" ],
      "defines": [
        'MY_DEFINE="<!(echo $MY_ENV_VAR)"'
      ]
    }
  ]
}
{
“目标”:[
{
“目标名称”:“目标名称”,
“源”:[“source.cc”],
“定义”:[

'MY_DEFINE=“你不能。变量不是常量。你的问题体现了术语上的矛盾。@EJP我不是问如何使变量常量(术语上肯定是矛盾的),我问的是如何在编译时定义一个常量。你不能。变量不是常量。你的问题体现了术语上的矛盾。@EJP我不是问如何使变量成为常量(术语上肯定是矛盾的),我是问如何在编译时定义一个常量