【问题标题】:How can I conditionally compile native code for node.js based on the node version using node-gyp?如何使用 node-gyp 根据节点版本有条件地为 node.js 编译本机代码?
【发布时间】:2012-08-03 00:06:28
【问题描述】:

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

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

节点版本是否有预处理器#define?我找不到一个。我能想到的最好的办法是在 binding.gyp 中做一些笨拙的事情,以尝试根据

【问题讨论】:

    标签: node.js libuv node-gyp


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-26
      相关资源
      最近更新 更多