gyp - 如何指定链接库风格

Posted

技术标签:

【中文标题】gyp - 如何指定链接库风格【英文标题】:gyp - how to specify link library flavor 【发布时间】:2012-12-08 10:14:54 【问题描述】:

我正在编写一个本地节点模块,我希望能够在发布和调试版本中构建它。

节点模块链接到另一个库,该库在两个不同的目录中具有调试和发布版本。

现在这就是我卡住的地方 - 我如何为正在构建的当前配置指定库目录?

我尝试在configuration.debug.link_settings 键中设置它,但我收到错误: '在调试配置中不允许链接设置,在目标 binding.gyp 中找到

【问题讨论】:

【参考方案1】:

显然,这在跨平台方式中是不可能的。 因此,希望这可以节省您几个小时的实验时间。

这是一个为 Mac 和 Windows 构建插件的 gyp 文件。

//This example assumes you have an external library 'thelibrary', located in 
//./external/thelibrary
//With the two flavors, debug and release in lib/debug and lib/release

    "targets": [
        
            "target_name": "addon",
            "sources": [
                "src/addon.cpp",
                "src/expose_the_library.cpp"
            ],
            "include_dirs": [
                "external/thelibrary/include"
            ],
            "cflags!": [
                "-fno-exceptions"
            ],
            "cflags_cc!": [
                "-fno-exceptions"
            ],
            "conditions": [
                [
                    "OS=='mac'",
                    
                        "defines": [
                            "__MACOSX_CORE__"
                        ],
                        "architecture": "i386",
                        "xcode_settings": 
                            "GCC_ENABLE_CPP_EXCEPTIONS": "YES"
                        ,
                        "link_settings": 
                            "libraries": [
                                "-lthelibrary",
                                "-framework",   
                                "IOBluetooth" //this is how you use a framework on OSX
                            ],
                            "configurations": 
                                "Debug": 
                                    "xcode_settings": 
                                        "OTHER_LDFLAGS": [
                                            "-Lexternal/thelibrary/lib/debug"
                                        ]
                                    
                                ,
                                "Release": 
                                    "xcode_settings": 
                                        "OTHER_LDFLAGS": [
                                            "-Lexternal/thelibrary/lib/release"
                                        ]
                                    
                                
                            
                        
                    
                ],
                [
                    "OS=='win'",
                    
                        "link_settings": 
                            "libraries": [
                                "-lthelibrary.lib",
                            ]
                        ,
                        "configurations": 
                            "Debug": 
                                "msvs_settings": 
                                    "VCCLCompilerTool": 
                                        "ExceptionHandling": "0",
                                        "AdditionalOptions": [
                                            "/MP /EHsc"
                                        ]
                                    ,
                                    "VCLibrarianTool": 
                                        "AdditionalOptions": [
                                            "/LTCG"
                                        ]
                                    ,
                                    "VCLinkerTool": 
                                        "LinkTimeCodeGeneration": 1,
                                        "LinkIncremental": 1,
                                        "AdditionalLibraryDirectories": [
                                            "../external/thelibrary/lib/debug"
                                        ]
                                    
                                
                            ,
                            "Release": 
                                "msvs_settings": 
                                    "VCCLCompilerTool": 
                                        "RuntimeLibrary": 0,
                                        "Optimization": 3,
                                        "FavorSizeOrSpeed": 1,
                                        "InlineFunctionExpansion": 2,
                                        "WholeProgramOptimization": "true",
                                        "OmitFramePointers": "true",
                                        "EnableFunctionLevelLinking": "true",
                                        "EnableIntrinsicFunctions": "true",
                                        "RuntimeTypeInfo": "false",
                                        "ExceptionHandling": "0",
                                        "AdditionalOptions": [
                                            "/MP /EHsc"
                                        ]
                                    ,
                                    "VCLibrarianTool": 
                                        "AdditionalOptions": [
                                            "/LTCG"
                                        ]
                                    ,
                                    "VCLinkerTool": 
                                        "LinkTimeCodeGeneration": 1,
                                        "OptimizeReferences": 2,
                                        "EnableCOMDATFolding": 2,
                                        "LinkIncremental": 1,
                                        "AdditionalLibraryDirectories": [
                                            "../external/thelibrary/lib/release"
                                        ]
                                    
                                
                            
                        
                    
                ]
            ]
        
    ]

【讨论】:

附加找到正确的设置名称使用MSVSSettings.py【参考方案2】:

我也遇到过这个问题,如果您在命令行上传递 --format=make-linux (例如),它将为“make”格式生成,但它会显式使用“linux”风格.

【讨论】:

以上是关于gyp - 如何指定链接库风格的主要内容,如果未能解决你的问题,请参考以下文章

如何在 binding.gyp node-gyp 中为 node.js 扩展添加对静态库的依赖

节点本机模块 - 链接静态库

如何链接到 GitHub 存储库的***目录

如何静态链接到 libstdc++.喜欢升级的GCC的朋友快来看看

Linux2.6 如何编写Makefile,使驱动程序能够编译链接静态库

动态库链接注意事项