2012-08-03 42 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

相關問題