我正在编写一个本机节点模块,我希望能够在发布和调试版本中构建它。
节点模块链接到另一个库,该库在两个不同的目录中具有调试版和发行版。
现在这就是我被困住的地方 - 如何为正在构建的当前配置指定库目录?
我已经尝试在configurations.debug.link_settings键中设置它,但是我收到错误: 调试配置中不允许使用link_settings,可在target binding.gyp
中找到答案 0 :(得分:15)
显然,跨平台方式无法做到这一点。 所以希望这将为您节省几个小时的实验。
这是一个gyp文件,可以为Mac和Windows构建插件。
//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"
]
}
}
}
}
}
]
]
}
]
}
答案 1 :(得分:0)
我也遇到了这个问题,似乎如果您在命令行上传递--format = make-linux(例如),它将以'make'格式生成,但会显式使用'linux'风格