我有多个应用程序将使用一个或多个公共(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时,我有以下行为:
这基本上是Visual Studio可以执行的多年,对我来说似乎是一件很基本的事情,我不明白我是唯一遇到此问题的人。
您对如何执行此操作有任何了解吗?我尝试了基于SUBDIRS的不同解决方案,但我从未达到上述所有3点。
编辑:为了澄清一点,我希望能够做类似的事情:
Application1.pro
include("Library1")
Application2.pro
include("Library1")
include("Library2")
并自动执行所有操作。我找到了一种解决方案,要求库中的文件知道什么是“父级”,包括某些内容,这对我来说是无稽之谈,库不应该知道使用它的程序。
最佳答案
您可以执行以下项目:
我的项目:
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