我有一些为节点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'值。必须有更好的方法!
答案 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'] } ]
]
不是最优雅的解决方案,但显然,现在没有什么比这更好了。