关于node-gyp如何进行编译,我想它的官网已经说的很详细了:
https://github.com/nodejs/node-gyp
但是我感觉关于binding.gyp文件的语法规则还是说的不明确,大概是因为它本身也不属于node-gyp的范畴吧
gyp文件的语法规则的官方文档应该是这个:https://code.google.com/p/gyp/wiki/GypLanguageSpecification
但是由于墙的原因,所以无法打开,国内我从网上找的比较好的文档是这个:
http://www.cnblogs.com/x_wukong/p/4829598.html
大部分配置都能找到。
在这里我主要说下以下两个问题:
一、引入第三方头文件和库文件
我以引入boost这个库为例,头文件的引入通过设置 include_dirs 而库的引入通过设置 link_settings。
配置文件如下:
{ "variables": { "boost_dir": "D:/boost_1_65_1", "boost_lib": "D:/boost_1_65_1/stage/vc14-x64/lib/" }, "targets": [ { "target_name": "addon", "sources": [ "addon_boost.cpp" ], "include_dirs": [ "<!(node -e "require('nan')")", "<(boost_dir)" ], "link_settings": { "libraries": [ "<(boost_lib)/libboost_filesystem-vc140-mt-s-1_65_1.lib", "<(boost_lib)/libboost_system-vc140-mt-s-1_65_1.lib" ] } } ] }
二、关于编译的架构(也就是系统位数)问题
node-gyp 提供 --arch 参数去支持编译成不同位数的addon, ia32表示32位,x64表示64位。
在编译的时候需要注意你引入的第三方库是32位的还是64位的,我之前引入的boost库是32位的,然后我用node-gyp去按照64位去编译结果就报错了。
除此之外,还需要你的node位数和你的addon位数保持一致,否则无法用node执行该文件。
总结一下:就是需要c++的源文件里引入的第三方库 和 node-gyp 和 node 这三个位数保持一致。
最后附上我的项目地址: