2012-08-03 81 views
2

我为节点0.8及其增强的libuv编写的node.js模块有一些C++代码。具体而言,我使用的是uv_mutex_ *函数,它不包含在节点0.6中包含的libuv中。我想有条件地嵌入这些函数的pthreads等价物,但只有在构建旧版本时才有效。如何使用node-gyp根据节点版本条件编译node.js的本机代码?

当节点0.8和运行的Linux版本,内置该节点的版本是0.6这应该给我一个跨平台的版本(Windows和Linux)。

是否有节点版本的预处理器#define?我找不到一个。我能想出的最好的是做一些缺憾的东西在binding.gyp试图猜测基于<版本@(node_root)并以某种方式按摩变成一只“定义”价值。一定会有更好的办法!

回答

2

binding.gyp文件MEMWATCH模块做了你在找什么。

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

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

,然后在条件中使用它:

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

不是最完美的解决方案,但显然,没有什么更好的,现在是。

+0

太棒了,谢谢Laurent。它可能不漂亮,但它的工作原理。 – kday 2012-08-03 19:54:05

相关问题