Qt qmake修改构建目录:引入外部库时将构建产物保存在项目内
解决方案
问题根因:你当前直接引入上层目录的库作为子项目时,qmake会以库pro文件相对于顶层pro的路径生成对应构建目录,因此两个库的构建产物会和kit目录平级,不同kit的编译产物混存就会出现链接冲突。
最优配置方案(无需修改原有库的项目配置)
通过本地代理pro文件的方式重定向子项目的构建输出路径,具体操作步骤如下:
- 在
myproject.pro所在的目录下新建名为libs的文件夹 - 在新建的
libs文件夹中分别创建lib1.pro和lib2.pro两个代理配置文件,内容分别为:
# lib1.pro 内容,路径请根据你的实际目录层级调整 include(../../../libs/lib1/lib1.pro)
# lib2.pro 内容,路径请根据你的实际目录层级调整 include(../../../libs/lib2/lib2.pro)
上述路径是从代理pro文件所在位置到原有库pro文件的相对路径,可根据你的实际目录结构调整。
- 修改
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
相关产品推荐
相关产品推荐

