【问题标题】:Qt qmake change build directory pathQt qmake 更改构建目录路径
【发布时间】:2021-11-08 11:07:07
【问题描述】:

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

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/

【问题讨论】:

    标签: qt qmake


    【解决方案1】:

    你应该告诉 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/
    

    【讨论】:

    • 我试过了,但不幸的是,构建路径没有改变。 Libs 构建路径仍然在 kit 的同一级别
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 2019-08-30
    相关资源
    最近更新 更多