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 扩展添加对静态库的依赖
如何静态链接到 libstdc++.喜欢升级的GCC的朋友快来看看