单个 Qt Creator 实例可同时管理多个项目,关键在于正确配置 SUBDIRS 容器项目(TEMPLATE = subdirs)、子项目构建顺序(SUBDIRS 列表顺序)与依赖(.depends)、Kit(Qt 版本+编译器+调试器三件套匹配)、运行设置(禁用“Stop running application”)及跨项目路径(INCLUDEPATH、LIBS 使用 $$PWD 和 $$OUT_PWD)。

单个 Qt Creator 实例就能同时管理多个项目,不需要装多个 IDE 或反复切换窗口——关键不是“能不能”,而是 SUBDIRS 项目结构和 Kit 配置是否对路。
用 SUBDIRS 创建统一容器项目
这不是“打开多个项目”的临时方案,而是把多个子项目纳入一个逻辑单元的正式做法。主项目必须是 TEMPLATE = subdirs,否则 Qt Creator 不会识别其下的子项目为构建单元。
-
SUBDIRS列表顺序默认就是构建顺序,比如SUBDIRS += libcore appmain tests表示先编译libcore,再编译appmain,最后跑测试 - 想强制依赖(比如确保
appmain总在libcore之后链接),得加appmain.depends = libcore到主.pro文件里,光靠顺序不够可靠 - 每个子项目必须有独立的
.pro文件,且TEMPLATE要明确:是app、lib还是subdirs,混用会导致 qmake 解析失败
Kit 配置决定多版本共存上限
Qt Creator 能否同时支持 Qt5.14.2 和 Qt6.5,不取决于你装了多少个 Qt,而取决于 Kit 是否完整注册了对应版本 + 编译器 + 调试器三件套。
- 进
Tools → Options → Kits,检查每个 Kit 的Qt version是否指向正确的qmake路径(例如Qt5.14.2/5.14.2/mingw81_64/bin/qmake.exe) - 同一编译器(如
MinGW 11.2)不能被两个不同 Qt 版本的 Kit 共享——Qt6 要求 C++17,Qt5.14 默认只认 C++11,Kit 会静默禁用不匹配的组合 - 如果某个子项目用了 Qt6 的新 API(比如
QRegularExpression的某些重载),但 Kit 绑的是 Qt5 的qmake,构建时不会报错,但运行时可能崩溃或行为异常
运行多个可执行子项目要关掉“单实例限制”
默认情况下,Qt Creator 只允许一个可执行项目处于“运行中”状态,其余会被自动终止——这不是 bug,是防止调试冲突的设计,但开发联调时很碍事。
- 进
Tools → Options → Build & Run → General,把Run configuration下的Run in terminal旁的Stop running application before starting another勾去掉 - 更彻底的解法:在
Projects → Build & Run → Run Settings中,为每个app子项目单独设置Run configuration,并启用Run in terminal,这样它们会各自开终端窗口,互不干扰 - 注意:
QProcess启动另一个子项目的可执行文件时,路径必须写绝对路径或相对于构建目录的路径,不能依赖$$OUT_PWD—— 因为$$OUT_PWD在不同子项目里指向不同目录
子项目间头文件和库链接容易漏掉这两步
即使 SUBDIRS 结构正确,子项目之间调用仍常因路径和链接配置缺失而报 undefined reference 或 file not found。
- 头文件包含:在调用方
.pro里加INCLUDEPATH += $$PWD/../libcore(注意是$$PWD,不是$$OUT_PWD),否则 moc 无法解析#include "libcore.h" - 链接库:若
libcore输出的是动态库,调用方需写LIBS += -L$$OUT_PWD/../libcore -llibcore;若是静态库,还得加CONFIG += staticlib到libcore.pro,否则生成的是 .dll/.so,不是 .a/.lib - Qt6 的模块依赖更严格:Qt5 里
QT += widgets可以隐式带入core和gui,Qt6 必须显式写全QT += core gui widgets,否则QWidget直接编译不过
真正麻烦的从来不是怎么建结构,而是每个子项目的 .pro 文件里那几行路径和依赖配置——差一个 / 或漏一个 $$,就卡住一上午。


















