2

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

在节点 0.8 上构建时,这应该给我一个跨平台构建(Windows 和 Linux),如果节点版本是 0.6,它应该给我一个正常运行的 Linux 版本。

节点版本是否有预处理器#define?我找不到一个。我能想到的最好的办法是在 binding.gyp 中做一些笨拙的事情,以尝试根据 <@(node_root) 猜测版本,并​​以某种方式将其按摩为“定义”值。肯定有更好的办法!

4

1 回答 1

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'] } ]
]

不是最优雅的解决方案,但显然,目前没有更好的解决方案。

于 2012-08-03T08:30:40.403 回答