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

发布了49 篇原创文章 · 获赞 26 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qianlixiaomage/article/details/105319178