Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑

MingW下编译QWt 6.2.0

  1. 下载qwt最新版本,用git工具 git clone下载源码
    git clone https://git.code.sf.net/p/qwt/git qwt-git
    或者使用我下载的 qwt 2.6.0
    链接:https://pan.baidu.com/s/1KZI-L10N90TJobeqqPYBqw?pwd=pq1o
    提取码:pq1o

  2. 下载安装Qt 5.15.2
    链接:https://pan.baidu.com/s/1mpcVYjzjL0udYAh0TGjtrA?pwd=2sz5
    提取码:2sz5

  3. 用Qt 5.15.2 自带的Qt Creator 5.0.2打开qwt.pro文件
    Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第1张图片

  4. 编译前的参数修改(网上一找一大把)
    打开QMAKE_RPATHDIR *=$${QWT_INSTALL_LIBS}
    Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第2张图片
    注释掉src/qwtbuild下的qwtbuild.pri里的CONFIG += debug_and_release
    因为你的工程要链接的第三方库肯定是release版本的库了
    Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第3张图片
    classinclude下的qwtbuil下的qwtbuild.pri里的 CONFIG += debug_and_release也是要注释掉#
    Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第4张图片
    编译MSVC会编译不通过的原因,本质原因应该不是修改一个安装目录就可以了(以后来研究),把qwtconfig.pri下的QWT_INSTALL_PREFIX路径修改成自己Qt安装使用的编译器下的路径里的include里新建自己的qwt头文件目录(qwtbuld.pri和qwtconfig.pro虽然有多个,其实点进去就知道都是同一个,修改一处就都修改了)
    Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第5张图片

  5. 编译的顺序是先【执行qmake】,然后开始【构建】
    需要选择release版本,在构建里选择Release
    Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第6张图片

  6. qmake完成,及构建完成后,会在构建目录下生成编译文件xx.dll和xx.a文件
    Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第7张图片

  7. 将qwt.dll和qwtd.dll放到本地的Qt 5.12.12安装目录的库目录中,这样基于Qt 5.12.12的自己的应用就可以使用qwt开发了,因为安装了qwt库
    Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第8张图片

  8. qwt的编译里还生成了designer.dll,如果将该designer.dll放到本地Qt 5.12.12的安装目录的designer插件中,那么在Qt开发中的designer里可以直接拖动使用qwt控件,那也是非常方便的。
    Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第9张图片
    放到本地Qt的designer插件目录中
    Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第10张图片

  9. 用Qt Creator新建自己的应用程序,用Qt Designer打开mainwindow.ui

Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第11张图片
在Qt设计师中左侧控件拉到最下面看到qwt控件,此处你可以兴奋一分钟,将qwt控件拖动到右边,然后保存,然后qmake你的工程,构建并运行,就把qwt安装并运行到了你的个人Qt工程中了
Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第12张图片
Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第13张图片

MSVC 下编译QWT 6.2.0

说实话在MingW下载编译qwt是比较智障无难度的,因为Qt的安装过程中会把MingW编译器一起安装了,所以在Qt构建工具中MingW编译器的选择也十分简单,一般不会出错,但是MSVC编译器是随着Visual Studio (VS2022 VS2017)安装的,所以Qt的构建工具中经常是默认的MSVC版本的项目构建是黄色感叹号,没法直接使用其新建Qt MSVC工程,所以如果你的Qt工具里Qt MSVC构建都还没有配置好,然后你用Qt Creator打开qwt.pro去编译MSVC版本的库,会遇到编译问题,所以先解决Qt构建问题。

  1. 我安装的是VS2022,所以编译器是MSVC2017,但是Qt构建里默认MSVC2017无法使用,cmake也是无法使用。
    Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第14张图片
    我的图片中MSVC2015 64bit编译可以构建那个纯粹是扯淡,因为我清楚我的本机是VS2022 MSVC2017不可能是MSVC2015,即便选择了MSVC2015,最后工程还是带黄色感叹哈,所以在编译器里进行配置
  2. 这个克隆的方法也是网上一抓一大把,其实原因很明显我就死死咬住我是MSVC2017就不会出错了
    Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第15张图片
    如果你选择C++里或C里列出的C++ Complier或C Complier会出问题,因为其实他们是MSVC2005,错得离谱,所以选中一个编译器然后点击右边的克隆
    Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第16张图片
    ABI里面选择自定义,然后MSVC2005就可以选择了,肯定是果断选择自己VS对应的编译器,我的是MSVC2017
    Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第17张图片
    确定OK之后,在Qt Creator新建项目,选择克隆的编译器的构建就可以创建你本机的MSVC版本Qt项目了。
  3. 回到编译qwt的MSVC版本,在构建的过程中可以看到是否是真正使用自己的编译器进行构建
    Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第18张图片
    像我的构建里是MSVC 64bit,所以qmake和构建就没有再报错。
  4. MSVC2017里把qwt的库,放到本地对应目录中
    Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第19张图片
    Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第20张图片
    放到本机MSVC的库目录中,说到这里不得不为Qt的设计点赞,这种用动态库dll扩展插件,来扩展功能,确实就是牛逼Plus。
    Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第21张图片
    把两个对应的lib文件放到Qt本地lib安装目录下
    Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第22张图片
    Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第23张图片

把designer下的qwt的designer插件也放到本地qt的designer设计师插件目录下
Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第24张图片
Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第25张图片
5. 新建Qt MSVC工程

Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第26张图片

Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第27张图片

# .pro里添加 qwt的配置
CONFIG += qwt
DEFINES += QT_DLL QWT_DLL
LIBS += -L"C:\Qt\Qt5.12.12\5.12.12\msvc2017_64\lib" -lqwtd
LIBS += -L"C:\Qt\Qt5.12.12\5.12.12\msvc2017_64\lib" -lqwt
INCLUDEPATH += D:\develop\qwt\qwt-git\src

Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第28张图片
Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第29张图片
6. 其实到这里很多时候已经完成了,但是这里很倔强,跟我开了个玩笑
Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第30张图片
: static_assert failed "Error in C++ Standard Library usage."
但是程序员天生就是对Bug兴奋,那就老套路了,挨字分析error总能找出问题所在
Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第31张图片
就是VS的编译器版本的问题,始终如一地选择自己本地自己确认的编译器版本,就不会有问题了

-------------------------2024-1-20---------------------------
Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第32张图片
看到clang的编译器错误,肯定是不合理的,我的就是MSVC2017,所以针对项目选了过来
Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第33张图片
新建了一个项目用msvc2017克隆版本编译器。
Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第34张图片
跟前面一样把ui用designer打开,然后拖几个qwt控件。我的qwt的头文件即src文件的目录修改了,所以最开始编译还报错找不到文件,然后改成了真实路径。
Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑_第35张图片

到这里所有问题都已经解决了。但是留下一个问题,我要把qwt的库及头文件打包我的个人项目3rdparty中,如何让cmake找到我的qwt package,程序员就是永远走在解决一个问题又开始下一个问题的路上。

你可能感兴趣的:(Qt开发,qwt编译使用,qt,5.12.12编译qwt,下载qt,5.12.12,编译安装qwt,qwt,6.2.0编译)