一、qt项目由源码和界面资源文件到程序的步骤分析
Qt程序编译经历的步骤
- 编译pro生成makefile
- jom或者make编译makefile
- 生产界面源码
uic.exe widget.ui -o ui_widget.h - 生产信号槽代码
moc.exe widget.h moc_widget.cpp
- 生产界面源码
从代码到程序执行经历的步骤
- 预处理-头文件加载和宏生成cpp
- 编译-cpp到.o或者.obj
- 链接so lib o obj res a
- 执行exe dll so
二、 配置vs和qmake环境变量执行qmake生成makefile
手动创建pro
- 创建testqmake.pro
SOURCES += main.cpp
CONFIG += console
创建main.cpp
#include <iostream>
using namespace std;
int main()
{
cout << "test for qmake" << endl;
return 0;
}
- 配置vc的环境
找寻“C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build”中的vcvarsall.bat
创建bat文件配置vc环境
make.bat
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"
记得带引号,不然空格会有问题
注:vcvarsall.bat 是 Microsoft Visual C++ 编译器 (MSVC) 提供的一个批处理脚本,用于设置开发环境的一些必要变量和路径,以便编译和构建 C++ 代码。它通常用于配置命令行开发环境,以便使用 Visual C++ 编译器和工具链。
- 配置Qt环境变量
配置qmake
配置jom(用来做编译的)
使用jom /f Makefile.Debug编译Debug版本
统一到批处理中
make.bat文件如下:
call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"
qmake -o makefile testqmake.pro
jom /f makefile.Debug
pause
四、qmake的pro项目导出为vs项目
导入VS
- qmake -tp vc test.pro
- 使用vs工具导入
五、qmake引入qt库创建窗口设置头文件分析makefile并设置输出
加载Qt内部库
- QT += core gui
- QT -= gui
头文件引用
testqmake.pro配置
QT += widgets
message($$PWD)
INCLUDEPATH += ../../include
#INCLUDEPATH += $$PWD/../../include
SOURCES += main.cpp
CONFIG += console
main.cpp配置
#include <iostream>
#include <QWidget>
#include <QApplication>
using namespace std;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
w.show();
a.exec();
return 0;
}
六、qmake语法设置pro中的库导入路径和导入库导入opencv
库引用和库路径指定
- LIBS += -L"…/…/lib" -lopencv_world320
- linux libopencv_world320.so
testqmake.pro配置
QT += widgets
message($$PWD)
INCLUDEPATH += include
#INCLUDEPATH += $$PWD/../../include
LIBS += -Llib -lopencv_world480
SOURCES += main.cpp
CONFIG += console
DESTDIR += bin
TARGET = testq
main.cpp配置
#include <iostream>
#include <QWidget>
#include <QApplication>
#include <opencv2/highgui.hpp>
using namespace cv;
using namespace std;
int main(int argc, char *argv[])
{
namedWindow("opencv");
QApplication a(argc, argv);
QWidget w;
w.show();
a.exec();
return 0;
}
七、qmake创建动态链接和静态链接库并在windows中输出dll和lib
libdll.pro
SOURCES += xsocket.cpp
HEADERS += xsocket.h \
xglobal.h
TARGET= libdll
TEMPLATE = lib
DEFINES += LIBDLL_LIB
#CONFIG = staticlib
#CONFIG += console
xglobal.h
#ifndef XGLOBAL_H
#define XGLOBAL_H
#include <QtCore/qglobal.h>
#ifndef LIBDLL_LIB
#define XEXPORT Q_DECL_EXPORT
#else
#define XEXPORT Q_DECL_IMPORT
#endif
#endif // XGLOBAL_H
xsocket.h
#ifndef XSOCKET_H
#define XSOCKET_H
#include "xglobal.h"
class XEXPORT test1
{
public:
test1();
};
#endif
xsocket.cpp
#include <iostream>
#include "xsocket.h"
using namespace std;
test1::test1()
{
cout << "hello world" << endl;
int a = 10;
cin >> a;
}
注意:
#ifndef XSOCKET_H
#define XSOCKET_H
预处理只是针对单个.cpp有效!
八、pro项目文件中设置dll和lib的输出路径
INCLUDEPATH += "../libDll" //配置。h头文件
LIBS += -L../lib -llibdll //配置lib文件
九、qtcreator的debug版本和release版本配置和设置
CONFIG(debug, debug|release){
TARGET = libdll_d
}else{
TARGET = libdll
}
message($$TARGET)
release和debug区别:
1、debug版本在代码生成的二进制文件中,包含了很多调试信息。
2、c++性能优化方便等等…