使用过node-gyp编译nodejs的addon插件的人,一定很好奇,node-gyp到底帮你做了什么事情,还有,如果我们自己做,难度到底如何。本文不作makefile文件语法的讲解,如果你不懂, 没关系,能看懂基本流程就好。抛开node-gyp,你会发现,有些复杂的东西其实是基于很简单的原理。
#include <stdio.h> #include <stdlib.h> #include <node/node.h> #include <node/v8.h> using namespace v8; /** * 输出world */ Handle<Value> hello(const Arguments& args) { HandleScope scope; return scope.Close(String::New("world")); } void init(Handle<Object> exports) { exports->Set(String::NewSymbol("hello"), FunctionTemplate::New(hello)->GetFunction()); } NODE_MODULE(hello, init)
CC = g++ #output dir OUTDIR = ./build #the moudle name MODULE_NAME = hello.node #target path TARGET = $(OUTDIR)/$(MODULE_NAME) #可以定义变量 objs = $(OUTDIR)/hello.o CPPFLAGS = -shared -fPIC LINKFALGS = -shared -pthread -rdynamic -m64 -lpthread -Wl,-soname=$(MODULE_NAME) all: $(OUTDIR) $(objs) flock $(OUTDIR)/linker.lock $(CC) $(LINKFALGS) -o $(TARGET) -Wl,--start-group $(objs) -Wl,--end-group $(OUTDIR): mkdir $@ $(objs): $(OUTDIR)/%.o: %.cc $(CC) -c $(CPPFLAGS) $< -o $@ #声明clean是一个伪目标 .PHONY: clean clean: -rm -rf $(OUTDIR) -rm -f $(TARGET)
var module = require('./build/hello'); var value = module.hello(); console.log(value);
world
原文地址:http://blog.csdn.net/limite_god/article/details/43877159