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配置文件的一些粗解,其实其最终目的,就是配置一些参数,传给编译器链接器使用的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值