Qt qmake 更改构建目录路径

Qt qmake change build directory path

如何在我的项目中包含外部库并将构建保留在项目内部? 例如:

myproject.pro

TEMPLATE = subdirs
SUBDIRS += \
        ../../libs/lib1 \
        ../../libs/lib2 \
        app

这导致构建结构如下:

build/
├─ myproject/
│  ├─ kit1/
│  │  ├─ app/
│  ├─ kit2/
│  │  ├─ app/
│  ├─ libs/
│  │  ├─ lib1/
│  │  ├─ lib2/

因此,这会导致不兼容的链接。 我想要的构建结构是这样的:

build/
├─ myproject/
│  ├─ kit1/
│  │  ├─ libs/
│  │  │  ├─ lib1/
│  │  │  ├─ lib2/
│  │  ├─ app/
│  ├─ kit2/
│  │  ├─ libs/
│  │  │  ├─ lib1/
│  │  │  ├─ lib2/
│  │  ├─ app/

你应该告诉 qmake 应用程序依赖于 lib1 和 lib2。像这样重写 qmake 项目文件:

TEMPLATE = subdirs
 
  SUBDIRS = \
            lib1 \   # sub-project names
            lib2 \
            app
 
  
  lib1.subdir = ../../libs/lib1
  lib2.subdir = ../../libs/lib2
  app.subdir = app 
  app.depends = lib1 lib2

您也可以尝试通过添加

强制 qmake 在编译期间保持顺序
 CONFIG += ordered

到您的原始项目文件。

[编辑]

我想您正在使用 QtCreator 来构建项目,因此定义了 $$OUT_PWD 变量。 您可以将已编译的库复制到所需的目标位置。输入你的 app.pro 这样的东西:

TEMPLATE = app

INCLUDEPATH += \
              ../../../libs/lib1 \
              ../../../libs/lib2

SOURCES += <list of sources>

LIBS += \
   -L$$OUT_PWD/../libs/lib1 -llib1 \
   -L$$OUT_PWD/../libs/lib2 -llib2


QMAKE_PRE_LINK += $(MKDIR) $$OUT_PWD/../libs/lib1; cp -d ../../../libs/lib1/*so* $$OUT_PWD/../libs/lib1;
QMAKE_PRE_LINK += $(MKDIR) $$OUT_PWD/../libs/lib2; cp -d ../../../libs/lib2/*so* $$OUT_PWD/../libs/lib2/