从qmake迁移到qbs:.pri文件及安装机制的替代方案
Qbs 相关问题解答
1. 替代 qmake include.pri 的灵活实现方式
你说得对,Qbs 的 Module 确实需要放到指定的 modules 目录,用起来有点繁琐,但其实有更灵活的方式来实现 qmake 里 include.pri 的效果,完全不用调整目录结构:
方式一:用独立的 .qbs 文件封装文件组
在你的源码目录下创建一个简单的 .qbs 文件(比如命名为 my_source_files.qbs),把需要引入的文件和路径配置封装进去:
Group { name: "My Source Files" files: [ "my_file.h", "my_file.cpp" ] // 导出路径配置,方便主项目继承 export: { cpp.includePaths += path cpp.dependencyPaths += path } }
然后在主项目的 .qbs 文件里,通过 import 引入这个文件,再把它的内容整合到你的产品中:
import "some_path/my_source_files.qbs" as ExternalSourceGroup Project { Product { type: "application" files: "main.cpp" // 引入外部文件组 Group { name: "External Sources" files: ExternalSourceGroup.files // 继承导出的路径配置 cpp.includePaths: base.concat(ExternalSourceGroup.export.cpp.includePaths) cpp.dependencyPaths: base.concat(ExternalSourceGroup.export.cpp.dependencyPaths) } } }
方式二:直接在主项目中引用路径
如果你的需求很简单,甚至可以跳过封装,直接在主项目里用路径引用文件:
Project { Product { type: "application" files: [ "main.cpp", "some_path/my_file.h", "some_path/my_file.cpp" ] // 添加源码目录到 include 路径 cpp.includePaths: base.concat(["some_path"]) } }
方式三:用 SubProject 管理独立模块
如果这个源码目录未来可能要做成静态库/动态库,推荐用 SubProject 来管理,在源码目录下写一个完整的 Product 配置(比如 mylib.qbs):
StaticLibrary { name: "mylib" files: [ "my_file.h", "my_file.cpp" ] cpp.includePaths: [path] }
然后在主项目里引入这个子项目并添加依赖:
Project { SubProject { filePath: "some_path/mylib.qbs" configurationName: project.configurationName } Product { type: "application" files: "main.cpp" // 依赖子项目的静态库 Depends { name: "mylib" } } }
2. 静态库的外部目录安装问题
首先纠正一个误解:Qbs 完全支持安装到绝对路径,你之前觉得 Group.installPath 只能用相对路径可能是测试时的小疏漏。
直接使用绝对路径安装
你可以直接在 installPath 里写绝对路径,只要确保 qbs.install 设为 true 即可:
StaticLibrary { name: "mylib" files: "my_file.cpp" // 安装公共头文件到绝对路径 Group { name: "Public Headers" files: "my_file.h" installPath: "/usr/local/include/mylib" qbs.install: true } // 安装库文件到绝对路径 Group { files: product.targetName + product.suffix installPath: "/usr/local/lib" qbs.install: true } }
注意:安装到系统目录(比如 /usr/local)可能需要管理员权限,执行安装命令时记得加 sudo(Linux/macOS)或者以管理员身份运行终端(Windows)。
Qbs 推荐相对路径 + installPrefix 的原因
Qbs 默认推荐用相对路径结合 installPrefix,主要是为了跨平台兼容性和构建可重现性:
- 不同平台的标准安装目录不同(比如 Linux 是
/usr/local,Windows 是C:\Program Files),用installPrefix可以在构建时通过命令行灵活指定:qbs install --install-prefix "/usr/local" - 硬编码绝对路径会让项目在不同机器上的构建变得不灵活,比如不同用户的自定义安装目录可能不一样。
如果你的场景确实需要固定的绝对路径,直接写就好,Qbs 没有限制。
内容的提问来源于stack exchange,提问作者Alex Nevskiy
相关产品推荐
相关产品推荐

