我有多个应用程序将使用一个或多个公共(public)库。甚至我的图书馆也可能相互依赖。

这是文件树:

Libaries/
   Library1/
       Library1.pro
       Library1.cpp
       Library1.h
   Library2/
       Library2.pro
       Library2.cpp
       Library2.h
Applications/
   App1/
       App1.pro
       main.cpp
   App2/
       App2.pro
       main.cpp

App1取决于Library1。
App2取决于Library1和Library2。

我希望能够以一种简单的方式在Qt Creator中进行开发,当我打开Application1时,我有以下行为:
  • Qt创建者中可用的Application1代码
  • Qt创建者中可用的
  • Library1代码
  • 编译Application1会自动编译Library1并将输出的.dll / .so文件放在与Application1 .exe相同的目录中。

  • 这基本上是Visual Studio可以执行的多年,对我来说似乎是一件很基本的事情,我不明白我是唯一遇到此问题的人。

    您对如何执行此操作有任何了解吗?我尝试了基于SUBDIRS的不同解决方案,但我从未达到上述所有3点。

    编辑:为了澄清一点,我希望能够做类似的事情:

    Application1.pro
    include("Library1")
    

    Application2.pro
    include("Library1")
    include("Library2")
    

    并自动执行所有操作。我找到了一种解决方案,要求库中的文件知道什么是“父级”,包括某些内容,这对我来说是无稽之谈,库不应该知道使用它的程序。

    最佳答案

    您可以执行以下项目:
    我的项目:

  • project.pro
  • 应用
  • App.pro
  • main.cpp
  • lib1
  • lib1.pro
  • lib1.pri
  • lib1.h
  • lib1.cpp
  • lib2
  • lib2.pro
  • lib2.pri
  • lib2.h
  • lib2.cpp

  • project.pro
    TEMPLATE = subdirs
    CONFIG += ordered
    
    SUBDIRS += \
        lib1 \
        lib2 \
        App
    

    App.pro
    QT       += core
    
    QT       -= gui
    
    include(../lib1/lib1.pri)
    include(../lib2/lib2.pri)
    
    TARGET = App
    CONFIG   += console
    CONFIG   -= app_bundle
    
    TEMPLATE = app
    
    
    SOURCES += main.cpp
    

    main.cpp
    #include <QCoreApplication>
    #include "lib1.h"
    #include "lib2.h"
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        Lib1 lib1();
    
        return a.exec();
    }
    

    lib1.pro
    QT       -= gui
    
    TARGET = lib1
    TEMPLATE = lib
    
    DEFINES += LIB1_LIBRARY
    
    SOURCES += lib1.cpp
    
    HEADERS += lib1.h\
            lib1_global.h
    
    DESTDIR = ../libs
    
    unix {
        target.path = /usr/lib
        INSTALLS += target
    }
    
    OTHER_FILES += \
        lib1.pri
    

    lib1.pri
    INCLUDEPATH += $$PWD/
    LIBS += -L$$OUT_PWD/../libs/ -llib1
    

    lib2.pro
    QT       -= gui
    
    TARGET = lib2
    TEMPLATE = lib
    
    DEFINES += LIB2_LIBRARY
    
    SOURCES += lib2.cpp
    
    HEADERS += lib2.h\
            lib1_global.h
    
    DESTDIR = ../libs
    
    unix {
        target.path = /usr/lib
        INSTALLS += target
    }
    
    OTHER_FILES += \
        lib2.pri
    

    lib2.pri
    INCLUDEPATH += $$PWD/
    LIBS += -L$$OUT_PWD/../libs/ -llib2
    

    09-05 06:40