Qt程序编译经历的步骤
从代码到程序执行经历的步骤
手动创建pro
SOURCES += main.cpp
CONFIG += console
创建main.cpp
#include
using namespace std;
int main()
{
cout << "test for qmake" << endl;
return 0;
}
找寻“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++ 编译器和工具链。
使用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
导入VS
加载Qt内部库
头文件引用
testqmake.pro配置
QT += widgets
message($$PWD)
INCLUDEPATH += ../../include
#INCLUDEPATH += $$PWD/../../include
SOURCES += main.cpp
CONFIG += console
main.cpp配置
#include
#include
#include
using namespace std;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
w.show();
a.exec();
return 0;
}
库引用和库路径指定
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
#include
#include
#include
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;
}
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
#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
#include "xsocket.h"
using namespace std;
test1::test1()
{
cout << "hello world" << endl;
int a = 10;
cin >> a;
}
注意:
#ifndef XSOCKET_H
#define XSOCKET_H
预处理只是针对单个.cpp有效!
INCLUDEPATH += "../libDll" //配置。h头文件
LIBS += -L../lib -llibdll //配置lib文件
CONFIG(debug, debug|release){
TARGET = libdll_d
}else{
TARGET = libdll
}
message($$TARGET)
release和debug区别:
1、debug版本在代码生成的二进制文件中,包含了很多调试信息。
2、c++性能优化方便等等…