QtCreator按顺序编译多个子项目
- 0. 环境
- 1. 创建子项目
- 2. 创建SubProjectSln的子项目
- 3. 三个项目内容
-
- 4. 构建
0. 环境
Qt5.3.2 mingw482_32
1. 创建子项目
这个子项目类似于Visual Studio
中解决方案一样的存在,用于管理多个其他子项目。点击文件
->新建文件或项目
->其他项目
->子项目项目
->Choose
:
之后下一步
,选择需要的编译器,我这里只有mingw
,若有msvc
编译器也可选择msvc
,不同的编译器生成的静态库文件后缀名不一样,mingw
后缀为.a
,msvc
后缀为.lib
。
2. 创建SubProjectSln的子项目
UiApp
Dll
Lib
在SubProjectSln
项目上新建子项目,操作如下,其他类同:
创建完成后项目目录结构如下:
其中SubProjectSln
的项目文件内容如下:
TEMPLATE = subdirs
SUBDIRS += \
UiApp \
Dll \
Lib
这里最主要的就是这个项目文件
TEMPLATE
不为subdirs
则SubProjectSln
就不能创建子项目SUBDIRS
的项目顺序默认就是构建的顺序。
3. 三个项目内容
Dll
依赖 Lib
,UiApp
依赖Dll
3.1 Dll
Dll
主要内容如下:
#include "dll.h"
#include "../lib/lib.h"
Dll::Dll()
{
}
QString Dll::getDllName()
{
return "Dll";
}
QString Dll::getLibName()
{
Lib lib;
return lib.getName();
}
Dll
项目文件如下:
QT -= gui
TARGET = Dll
TEMPLATE = lib
DEFINES += DLL_LIBRARY
CONFIG(debug,debug|release){
DESTDIR = ../bin/debug
LIBS += ../bin/debug/libLib.a
} else {
DESTDIR = ../bin/release
LIBS += ../bin/release/libLib.a
}
SOURCES += dll.cpp
HEADERS += dll.h\
dll_global.h
unix {
target.path = /usr/lib
INSTALLS += target
}
3.2 Lib
Lib
主要内容如下:
#include "lib.h"
Lib::Lib()
{
}
QString Lib::getName()
{
return "Lib";
}
Lib
项目文件内容如下:
QT -= gui
TARGET = Lib
TEMPLATE = lib
CONFIG += staticlib
CONFIG(debug,debug|release){
DESTDIR = ../bin/debug
} else {
DESTDIR = ../bin/release
}
SOURCES += lib.cpp
HEADERS += lib.h
unix {
target.path = /usr/lib
INSTALLS += target
}
3.3 UiApp
UiApp
界面如下:
UiApp
界面代码如下:
#include "widget.h"
#include "ui_widget.h"
#include "../Dll/dll.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
Dll dll;
ui->setupUi(this);
ui->dllLabel->setText(dll.getDllName());
ui->libLabel->setText(dll.getLibName());
}
Widget::~Widget()
{
delete ui;
}
UiApp
项目文件如下:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = UiApp
TEMPLATE = app
CONFIG(debug,debug|release){
DESTDIR = ../bin/debug
LIBS += ../bin/debug/Dll.dll
} else {
DESTDIR = ../bin/release
LIBS += ../bin/release/Dll.dll
}
SOURCES += main.cpp\
widget.cpp
HEADERS += widget.h
FORMS += widget.ui
4. 构建
以如下顺序构建:
这里的错误就是因为UiApp
依赖了Dll
,所以构建的顺序颠倒了。
修改SubProjectSln
项目文件如下:
TEMPLATE = subdirs
SUBDIRS += \
Lib \
Dll \
UiApp
即可构建成功。
我网上查资料有的说要在SubProjectSln
项目文件中加CONFIG += ordered
,使SUBDIRS
按照顺序构建,但是我测试下来不加CONFIG += ordered
,也是按照顺序构建的,猜测可能是版本的原因~~~
运行结果如下:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)