如何使用node-gyp基于节点版本有条件地编译node.js的本机代码?

时间:2012-08-03 00:06:29

标签: node.js libuv node-gyp

我有一些为节点0.8及其增强的libuv编写的node.js模块的C ++代码。具体来说,我使用的是uv_mutex_ *函数,这些函数在节点0.6中包含的libuv中不存在。我想有条件地嵌入这些函数的pthreads等价物,但只有在旧版本的基础上构建。

如果节点版本为0.6,这应该为我提供跨平台构建(Windows和Linux),如果节点版本为0.6,则为Linux版本。

节点版本是否有预处理器#define?我找不到一个。我能想到的最好的方法是在binding.gyp中做一些kludgy的东西来尝试猜测基于< @(node_root)的版本并以某种方式将其按入'define'值。必须有更好的方法!

1 个答案:

答案 0 :(得分:2)

Memwatch模块的binding.gyp文件可以满足您的需求。

它定义了一个捕获节点版本的变量:

'variables': {
  'node_ver': '<!(node --version | sed -e "s/^v\([0-9]*\\.[0-9]*\).*$/\\1/")'
},

然后在条件中使用它:

'target_conditions': [
  ['node_ver=="0.8"', { 'defines': ['NEW_COMPACTION_BEHAVIOR'] } ]
]

不是最优雅的解决方案,但显然,现在没有什么比这更好了。