02.QMake项目原理和手动配置qtcreator

一、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

  1. 创建testqmake.pro
SOURCES += main.cpp
CONFIG += console

创建main.cpp

#include <iostream>

using namespace std;

int main()
{
	cout << "test for qmake" << endl;
	return 0;
}
  1. 配置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++ 编译器和工具链。

在这里插入图片描述
在这里插入图片描述

  1. 配置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++性能优化方便等等…

十、跨平台就先不看了吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值