node.js的C++擴展之cmake編譯-跨平臺版

0、引言

        node-gyp到底幹了些什麼呢?其實幹的事情和cmake、makefile是一抹一樣的,所以他能幹的事情,cmake依然可以,今天就介紹一種非常方便簡單的nodejs的C++擴展編寫方式,因爲它依賴的文件在linux下僅爲node的頭文件。window下的話額外需要一個node.lib即可。根據平臺條件編譯,分別生成各種平臺下的nodejs擴展模塊,本片的代碼跨平臺。在最後方的鏈接,歡迎下載品嚐。

1、依賴

2、cpp demo (官網demo)

#include "thirdPart/node/include/node/node.h"

namespace demo {

using v8::FunctionCallbackInfo;
using v8::Isolate;
using v8::Local;
using v8::NewStringType;
using v8::Object;
using v8::String;
using v8::Value;

void Method(const FunctionCallbackInfo<Value>& args) {
  Isolate* isolate = args.GetIsolate();
  args.GetReturnValue().Set(String::NewFromUtf8(
      isolate, "world", NewStringType::kNormal).ToLocalChecked());
}

void Initialize(Local<Object> exports) {
  NODE_SET_METHOD(exports, "hello", Method);
}

NODE_MODULE(hello, Initialize)

}

3、CMakeLists.txt

# Project Name 
SET( TARGETFILENAME "addon" )
PROJECT( ${TARGETFILENAME} ) 

#  CMake minimum version requirement setting
cmake_minimum_required(VERSION 3.8)
   
# node library 
SET(NODE_LIBRARIES node.lib) 
SET(NODE_LIBRARY_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/thirdPart/node/lib )
 
#  node library setting
IF (WIN32)
	FIND_LIBRARY(NODE_LIBRARY 
		NAMES  node 
		PATHS  ${CMAKE_CURRENT_SOURCE_DIR}/thirdPart/node/lib
	)
ENDIF (WIN32)
                         
# 設置包含目錄
INCLUDE_DIRECTORIES(
    ${CMAKE_CURRENT_SOURCE_DIR}/thirdPart/node/include/node 
)                         

SET( src demo.cc)

# 設置庫文件目錄
# 確保在生成目標之前
# windows上執行語句
IF (WIN32)
	LINK_DIRECTORIES(${NODE_LIBRARY_DIRS})
ENDIF (WIN32)

# 生成可執行文件

#add_executable(${TARGETFILENAME} demo.cpp)


# 生成靜態庫

#ADD_LIBRARY(${TARGETFILENAME} STATIC demo.cpp) 


# 生成動態庫或共享庫
ADD_LIBRARY ( ${TARGETFILENAME} SHARED 
     ${src}
)

# 修改後綴名爲  .node    
SET_TARGET_PROPERTIES(${TARGETFILENAME} PROPERTIES SUFFIX ".node")

# 設置鏈接庫文件
# windows上執行語句
IF (WIN32)
	TARGET_LINK_LIBRARIES( ${TARGETFILENAME}
		${NODE_LIBRARIES}  
	)
ENDIF (WIN32)

4、node中運行 

deepin中運行結果:

 

樹莓派中運行結果:

windows中運行結果:: 

5、結束語

       這難度,這舒適度、你品,你細品!資源鏈接https://download.csdn.net/download/qianlixiaomage/12309308

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章