Install node-gyp
npm install -g node-gyp
Prepare SourceCode
[root@localhost test_nodejs]# ls
binding.gyp hello.cc hello.js
hello.cc
#include namespace demo {
using v8::FunctionCallbackInfo;
using v8::Isolate;
using v8::Local;
using v8::Object;
using v8::String;
using v8::Value;
void Method(const FunctionCallbackInfo& args) {
Isolate* isolate = args.GetIsolate();
args.GetReturnValue().Set(String::NewFromUtf8(isolate, “world”));
}
void init(Local exports) {
NODE_SET_METHOD(exports, “hello”, Method);
}
NODE_MODULE(NODE_GYP_MODULE_NAME, init)
} // namespace demo
hello.js
// hello.js
const addon = require(‘./build/Release/addon’);
console.log(addon.hello());
// Prints: ‘world’
binding.gyp
{
“targets”: [
{
“target_name”: “addon”,
“sources”: [ “hello.cc” ]
}
]
}
Compile & Test
[root@localhost test_nodejs]# node-gyp configure
gyp info it worked if it ends with ok
gyp info using node-gyp@3.6.2
gyp info using node@8.11.1 linux x64
gyp info spawn /usr/bin/python2
gyp info spawn args [ ‘/usr/local/node-v8.11.1-linux-x64/lib/node_modules/node-gyp/gyp/gyp_main.py’,
gyp info spawn args ‘binding.gyp’,
gyp info spawn args ‘-f’,
gyp info spawn args ‘make’,
gyp info spawn args ‘-I’,
gyp info spawn args ‘/mnt/hgfs/linux_tmp/test_nodejs/build/config.gypi’,
gyp info spawn args ‘-I’,
gyp info spawn args ‘/usr/local/node-v8.11.1-linux-x64/lib/node_modules/node-gyp/addon.gypi’,
gyp info spawn args ‘-I’,
gyp info spawn args ‘/root/.node-gyp/8.11.1/include/node/common.gypi’,
gyp info spawn args ‘-Dlibrary=shared_library’,
gyp info spawn args ‘-Dvisibility=default’,
gyp info spawn args ‘-Dnode_root_dir=/root/.node-gyp/8.11.1’,
gyp info spawn args ‘-Dnode_gyp_dir=/usr/local/node-v8.11.1-linux-x64/lib/node_modules/node-gyp’,
gyp info spawn args ‘-Dnode_lib_file=/root/.node-gyp/8.11.1/<(target_arch)/node.lib’,
gyp info spawn args ‘-Dmodule_root_dir=/mnt/hgfs/linux_tmp/test_nodejs’,
gyp info spawn args ‘-Dnode_engine=v8’,
gyp info spawn args ‘–depth=.’,
gyp info spawn args ‘–no-parallel’,
gyp info spawn args ‘–generator-output’,
gyp info spawn args ‘build’,
gyp info spawn args ‘-Goutput_dir=.’ ]
gyp info ok
[root@localhost test_nodejs]#
[root@localhost test_nodejs]# ls
binding.gyp build hello.cc hello.js
[root@localhost test_nodejs]# ls build/
addon.target.mk binding.Makefile config.gypi Makefile
[root@localhost test_nodejs]# node-gyp build
gyp info it worked if it ends with ok
gyp info using node-gyp@3.6.2
gyp info using node@8.11.1 linux x64
gyp info spawn make
gyp info spawn args [ ‘BUILDTYPE=Release’, ‘-C’, ‘build’ ]
make: Entering directory `/mnt/hgfs/linux_tmp/test_nodejs/build’
CXX(target) Release/obj.target/addon/hello.o
SOLINK_MODULE(target) Release/obj.target/addon.node
COPY Release/addon.node
make: Leaving directory `/mnt/hgfs/linux_tmp/test_nodejs/build’
gyp info ok
[root@localhost test_nodejs]# ls build/
addon.target.mk binding.Makefile config.gypi Makefile Release
[root@localhost test_nodejs]# ls build/Release/
addon.node obj.target
[root@localhost test_nodejs]# node hello.js
world