You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt qmake修改构建目录:引入外部库时将构建产物保存在项目内

解决方案

问题根因:你当前直接引入上层目录的库作为子项目时,qmake会以库pro文件相对于顶层pro的路径生成对应构建目录,因此两个库的构建产物会和kit目录平级,不同kit的编译产物混存就会出现链接冲突。

最优配置方案(无需修改原有库的项目配置)

通过本地代理pro文件的方式重定向子项目的构建输出路径,具体操作步骤如下:

  1. 在myproject.pro所在的目录下新建名为libs的文件夹
  2. 在新建的libs文件夹中分别创建lib1.pro和lib2.pro两个代理配置文件,内容分别为:
# lib1.pro 内容,路径请根据你的实际目录层级调整
include(../../../libs/lib1/lib1.pro)
# lib2.pro 内容,路径请根据你的实际目录层级调整
include(../../../libs/lib2/lib2.pro)

上述路径是从代理pro文件所在位置到原有库pro文件的相对路径,可根据你的实际目录结构调整。

  1. 修改myproject.pro的子项目配置:
TEMPLATE = subdirs
SUBDIRS += \
        libs/lib1 \
        libs/lib2 \
        app

# 可选配置:指定app依赖两个库,保证编译顺序正确
app.depends = lib1 lib2

配置完成后重新执行qmake,生成的构建目录就会和你期望的结构完全一致,不同kit的库和应用构建产物完全隔离,不会再出现链接不兼容的问题。

可选:统一输出路径配置

如果原有库的pro文件中硬编码了DESTDIR、OBJECTS_DIR、MOC_DIR等输出路径变量,需要将这些变量改为基于$$OUT_PWD的相对路径配置,避免输出路径异常:

# 可将以下配置放到公共pri文件中,所有子项目都引入
DESTDIR = $$OUT_PWD/bin
OBJECTS_DIR = $$OUT_PWD/obj
MOC_DIR = $$OUT_PWD/moc
RCC_DIR = $$OUT_PWD/rcc
UI_DIR = $$OUT_PWD/ui

内容的提问来源于stack exchange,提问作者Fausto01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:45:07