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