如何在QBS中为32位构建配置不同的库路径?
解决MinGW 32/64位套件自动切换库路径的QBS配置方案
刚好我之前也处理过类似的QBS跨架构构建问题,给你分两步来搞定:
1. 根据构建架构动态切换库路径
QBS自带的qbs.architecture属性可以帮我们识别当前用的是32位还是64位套件。你只需要把原来固定的cpp.libraryPaths改成条件判断的形式,自动匹配对应的库目录:
cpp.libraryPaths: { // 判断当前架构,32位对应i686目录,64位对应x64目录 var libDirSuffix = qbs.architecture === "x86" ? "i686/lib" : "x64/lib"; return [basePath + "/" + libDirSuffix]; }
这里要注意:MinGW的32位套件在QBS里的qbs.architecture值通常是x86,64位则是x86_64(个别环境可能显示amd64),如果你的环境检测到的值不一样,加个控制台打印就能确认:
console.info("当前构建架构:", qbs.architecture);
2. 从本地配置/环境变量获取基础路径
要让基础路径C:/Foo跨系统自动适配,有两种省心的方式:
方式一:用环境变量(适合多系统通用)
在每个开发机器上设置一个自定义环境变量,比如叫FOO_LIB_ROOT,值设为对应机器的基础路径(比如你的机器是C:/Foo,同事的可能是D:/ThirdParty/Foo)。然后在QBS里读取这个变量:
// 读取环境变量,没读到的话用默认值兜底 property string basePath: qbs.getEnv("FOO_LIB_ROOT") || "C:/Foo"
方式二:用QBS本地配置(不用改系统环境)
如果不想碰环境变量,可以用QBS的本地配置存储路径。打开命令行,执行一次这个命令(每个机器只需要执行一次):
qbs config settings.fooLibRoot "C:/Foo"
然后在QBS文件里导入并读取这个配置:
import qbs // 读取QBS本地配置,兜底用默认路径 property string basePath: settings.fooLibRoot || "C:/Foo"
完整的配置示例
把两部分结合起来,你的项目QBS配置大概是这样的(以CppApplication为例):
import qbs CppApplication { // 第一步:获取基础路径 property string basePath: qbs.getEnv("FOO_LIB_ROOT") || "C:/Foo" // 第二步:根据架构自动设置库路径 cpp.libraryPaths: { var libSubdir = qbs.architecture === "x86" ? "i686/lib" : "x64/lib"; return [basePath + "/" + libSubdir]; } // 你的其他项目配置(源文件、链接库等)... files: ["main.cpp"] }
这样不管你切换32位还是64位MinGW套件,QBS都会自动加载对应的库路径,而且基础路径也能跨系统自动适配啦。
内容的提问来源于stack exchange,提问作者M.M
相关产品推荐
相关产品推荐

