node binding.gyp 配置文件粗解
生活随笔
收集整理的這篇文章主要介紹了
node binding.gyp 配置文件粗解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我感覺谷歌的官方文檔本身就不完善,導致我沒辦法詳解,很多配置都是看?別人寫的?慢慢摸索出來的。windows篇章里,我實現了一個海康node插件,linux版里,我同樣實現了這個功能.
{"variables": {"module_path%": ""},"targets": [{"target_name": "hik_camera","cflags!": ["-fno-exceptions"],"cflags_cc!": ["-fno-exceptions"],"sources": ["src/index.cpp","src/KSHikCameraWrapper.cpp","src/common.cpp",],"include_dirs": ["<!@(node -p \"require('node-addon-api').include\")"],"defines": ["NAPI_DISABLE_CPP_EXCEPTIONS", "NAPI_VERSION=6"],"conditions": [['OS == "win"',{"msvs_configuration_attributes": {"CharacterSet": "0"},"msvs_settings": {"VCCLCompilerTool": {"DebugInformationFormat": 3}},"include_dirs": ["sdk/win/include"],"libraries": ["../sdk/win/lib/HCNetSDK.lib"],"conditions": [['module_path == ""',{"copies": [{"destination": "<(module_root_dir)/prebuilds/win32-x64","files": ["<(module_root_dir)/sdk/win/bin/AudioRender.dll","<(module_root_dir)/sdk/win/bin/GdiPlus.dll","<(module_root_dir)/sdk/win/bin/HCCore.dll","<(module_root_dir)/sdk/win/bin/HCNetSDK.dll","<(module_root_dir)/sdk/win/bin/hlog.dll","<(module_root_dir)/sdk/win/bin/HmMerge.dll","<(module_root_dir)/sdk/win/bin/hpr.dll","<(module_root_dir)/sdk/win/bin/HXVA.dll","<(module_root_dir)/sdk/win/bin/libeay32.dll","<(module_root_dir)/sdk/win/bin/libmmd.dll","<(module_root_dir)/sdk/win/bin/MP_Render.dll","<(module_root_dir)/sdk/win/bin/NPQos.dll","<(module_root_dir)/sdk/win/bin/PlayCtrl.dll","<(module_root_dir)/sdk/win/bin/ssleay32.dll","<(module_root_dir)/sdk/win/bin/SuperRender.dll","<(module_root_dir)/sdk/win/bin/YUVProcess.dll","<(module_root_dir)/sdk/win/bin/zlib1.dll","<(module_root_dir)/sdk/win/bin/HCNetSDKCom/",],}]},'module_path != ""',{"copies": [{"destination": "<(module_root_dir)/<(module_path)","files": ["<(module_root_dir)/sdk/win/bin/AudioRender.dll","<(module_root_dir)/sdk/win/bin/GdiPlus.dll","<(module_root_dir)/sdk/win/bin/HCCore.dll","<(module_root_dir)/sdk/win/bin/HCNetSDK.dll","<(module_root_dir)/sdk/win/bin/hlog.dll","<(module_root_dir)/sdk/win/bin/HmMerge.dll","<(module_root_dir)/sdk/win/bin/hpr.dll","<(module_root_dir)/sdk/win/bin/HXVA.dll","<(module_root_dir)/sdk/win/bin/libeay32.dll","<(module_root_dir)/sdk/win/bin/libmmd.dll","<(module_root_dir)/sdk/win/bin/MP_Render.dll","<(module_root_dir)/sdk/win/bin/NPQos.dll","<(module_root_dir)/sdk/win/bin/PlayCtrl.dll","<(module_root_dir)/sdk/win/bin/ssleay32.dll","<(module_root_dir)/sdk/win/bin/SuperRender.dll","<(module_root_dir)/sdk/win/bin/YUVProcess.dll","<(module_root_dir)/sdk/win/bin/zlib1.dll","<(module_root_dir)/sdk/win/bin/HCNetSDKCom/",],}]},]],},'OS == "linux"',{"include_dirs": ["sdk/linux/include"],"libraries": ["-L<(module_root_dir)/sdk/linux/bin","-lhcnetsdk",],"link_settings": {"libraries": ["-Wl,-rpath,'$$ORIGIN'"],},# "cflags": ["-finput-charset='gbk'"],"cflags": ["-finput-charset='gbk'", "-fexec-charset='gbk'"],# "cflags_cc": ["-fwide-exec-charset='gbk'"],"conditions": [['module_path == ""',{"copies": [{"destination": "<(module_root_dir)/prebuilds/linux-x64","files": ["<(module_root_dir)/sdk/linux/bin/HCNetSDK_Log_Switch.xml","<(module_root_dir)/sdk/linux/bin/libAudioRender.so","<(module_root_dir)/sdk/linux/bin/libcrypto.so","<(module_root_dir)/sdk/linux/bin/libcrypto.so.1.0.0","<(module_root_dir)/sdk/linux/bin/libHCCore.so","<(module_root_dir)/sdk/linux/bin/libhcnetsdk.so","<(module_root_dir)/sdk/linux/bin/libhpr.so","<(module_root_dir)/sdk/linux/bin/libNPQos.so","<(module_root_dir)/sdk/linux/bin/libopenal.so.1","<(module_root_dir)/sdk/linux/bin/libPlayCtrl.so","<(module_root_dir)/sdk/linux/bin/libssl.so","<(module_root_dir)/sdk/linux/bin/libSuperRender.so","<(module_root_dir)/sdk/linux/bin/libz.so","<(module_root_dir)/sdk/linux/bin/HCNetSDKCom/",],}]},'module_path != ""',{"copies": [{"destination": "<(PRODUCT_DIR)","files": ["<(module_root_dir)/sdk/linux/bin/HCNetSDK_Log_Switch.xml","<(module_root_dir)/sdk/linux/bin/libAudioRender.so","<(module_root_dir)/sdk/linux/bin/libcrypto.so","<(module_root_dir)/sdk/linux/bin/libcrypto.so.1.0.0","<(module_root_dir)/sdk/linux/bin/libHCCore.so","<(module_root_dir)/sdk/linux/bin/libhcnetsdk.so","<(module_root_dir)/sdk/linux/bin/libhpr.so","<(module_root_dir)/sdk/linux/bin/libNPQos.so","<(module_root_dir)/sdk/linux/bin/libopenal.so.1","<(module_root_dir)/sdk/linux/bin/libPlayCtrl.so","<(module_root_dir)/sdk/linux/bin/libssl.so","<(module_root_dir)/sdk/linux/bin/libSuperRender.so","<(module_root_dir)/sdk/linux/bin/libz.so","<(module_root_dir)/sdk/linux/bin/HCNetSDKCom/",],}]},]],},]],}], }部分指令的解釋:
一,條件
可以根據 conditions 實現條件編譯,比如在 windows 平臺下,或者 Linux 平臺下引用不同的庫。
二,編譯器鏈接器指令
?
windows 下,我使用的微軟的cl(c/c++)?編譯器,所以可以傳入編譯和鏈接指令。上圖所示就是如何配置字符集。
那么gyp支持哪些配置呢?在查看了gyp的源碼之后,我發現,只支持這么幾種:
?那么這些指令對應的文檔在哪里呢?大家可以看這里:配置選項
?
細節方面,大家自己看MSDN吧,然后自己嘗試配置看看。
再就是linux一些配置:
?
關于linux的一些配置,如果涉及到引用第三方庫,則需要處理好庫文件路徑。對于這個問題,大家可以移步看看我的這篇文章。
以上,就是gyp配置文件的一些粗解,其實其最終目的,就是配置一些參數,傳給編譯器鏈接器使用的。
?
總結
以上是生活随笔為你收集整理的node binding.gyp 配置文件粗解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决Cannot deserialize
- 下一篇: 【机器学习】线性回归——最小二乘法(理论