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