使用makefile編譯nodejs模組

2021-06-28 18:46:45 字數 1716 閱讀 1069

使用過node-gyp編譯nodejs的addon外掛程式的人,一定很好奇,node-gyp到底幫你做了什麼事情,還有,如果我們自己做,難度到底如何。本文不作makefile檔案語法的講解,如果你不懂, 沒關係,能看懂基本流程就好。拋開node-gyp,你會發現,有些複雜的東西其實是基於很簡單的原理。

作業系統為centos7,已經安裝了nodejs,版本為0.10.36,其實差不多新的版本就行。編譯鏈也已經準備好,g++命令啦。

原始檔hello.cc,很簡單,基本和官網的hello world例子一樣。

#include #include #include #include using namespace v8;

/** * 輸出world

*/handlehello(const arguments& args)

void init(handleexports)

node_module(hello, init)

當我們呼叫模組的hello方法的時候,希望輸出world。

makefile的一些引數,參考了node-gyp生成的makefile,但是這個就簡單多了,看**

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)

all是預設的目標,在子目錄build下生成hello.node。

在當前目錄下執行make就行。如果一切順序,在當前目錄下會生成build目錄,裡面有我們想要的hello.node。

編寫測試**test.js

var module = require('./build/hello');

var value = module.hello();

console.log(value);

執行node test.js,oh,居然輸出了

world

原來,沒有node-gyp,你也可以自由的編寫nodejs的模組的。需要的僅僅是一些makefile的知識。這些資料網上也不容易找,希望能幫上大家。

編譯 makefile使用

本文重在記錄makefile的使用方法,不介紹相關原理。注意 所有的makefile指令前面都需要兩個tab縮排 1.初步使用 建立工作目錄,工作目錄下建立如下兩個檔案 main.c include int main makefile 或 makefilemain.o main.c cc c mai...

使用makefile編譯c程式

一 makefile的規則 makefile的規則如下 target prerequisites command 這裡的command是指生成或是處理target隨執行的命令 prerequisites指的是生成target所需要依賴的檔案.二 乙個示例 自行編寫了2個c檔案 get max.c,f...

使用makefile編譯C 工程

目錄結構 kexin 外層cmakelists.txt編寫 cmake 最低版本號要求 cmake minimum required version 3.7 fatal error 專案資訊 project kexin include路徑 include directories include 設定...