欢迎关注更多精彩
关注我,学习常用算法与数据结构,一题多解,降维打击。

背景

  • qt 有两种编译器,分别是visual studio和MinGW。
  • 很多第三方库提供编译好的visual studio 库,MinGW库需要自己编译。
  • 喜欢MinGW没有太多版本,不像visual studio 有种版本。
  • 具体QT配置第三方库也比较简单。

这里以OpenMesh为例学习一下Cmake+MinGW编译lib库成果,并用Qt引用

需要的工具

  • Cmake https://cmake.org/download/
  • Qt Creator https://www.qt.io/zh-cn/download
  • OpenMesh 源代码 https://www.graphics.rwth-aachen.de/software/openmesh/download/
    在这里插入图片描述

Cmake 目录:C:\Program Files\CMake\bin

安装好Qt 后会有自带的mingw 编译器。
目录是:C:/Qt/Qt5.12.11/Tools/mingw730_64/bin

cmake, mingw 添加到系统环境变量path
在这里插入图片描述

OpenMesh 解压目录 不要中文目录
D:/OpenMesh/OpenMesh-10.0.0

构建产物目录:
D:/OpenMesh/OpenMesh-10.0.0/build
在这里插入图片描述

安装目录(默认):C:\Program Files (x86)\OpenMesh

可能出现的错误或坑

构建阶段

错误1:CMake Error: CMake was unable to find a build program corresponding to “MinGW Makefiles”. CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
解决方法:配置 CMAKE_MAKE_PROGRAM = C:/Qt/Qt5.12.11/Tools/mingw730_64/bin/mingw32-make.exe
在这里插入图片描述


错误2 :No CMAKE_C_COMPILER could be found.
解决方法:配置 CMAKE_C_COMPILER = C:/Qt/Qt5.12.11/Tools/mingw730_64/bin/gcc.exe
在这里插入图片描述


错误3:No CMAKE_CXX_COMPILER could be found.
解决方法:配置 CMAKE_CXX_COMPILER = C:/Qt/Qt5.12.11/Tools/mingw730_64/bin/g++.exe
在这里插入图片描述

编译阶段

错误:C:/Qt/Qt5.12.11/Tools/mingw730_64/bin/…/lib/gcc/x86_64-w64-mingw32/7.3.0/…/…/…/…/x86_64-w64-mingw32/bin/as.exe: CMakeFiles\OpenMeshCore.dir\Utils\PropertyCreator.cc.obj: too many sections (41925)
原因:是编译的文件太大了
解决方法:CMAKE_CXX_FLAGS=-Wa,-mbig-obj, 重新Configure , Generate
在这里插入图片描述

构建

在这里插入图片描述
先Configure 再Generate
在这里插入图片描述

关键配置

配置
CMAKE_MAKE_PROGRAMC:/Qt/Qt5.12.11/Tools/mingw730_64/bin/mingw32-make.exe
CMAKE_C_COMPILERC:/Qt/Qt5.12.11/Tools/mingw730_64/bin/gcc.exe
CMAKE_CXX_COMPILERC:/Qt/Qt5.12.11/Tools/mingw730_64/bin/g++.exe
CMAKE_CXX_FLAGS-Wa,-mbig-obj

成功画面
在这里插入图片描述

编译&安装

在这里插入图片描述

管理员身份打开cmd命令行, 管理员身份 管理员身份 管理员身份

进入到D:/OpenMesh/OpenMesh-10.0.0/build运行 mingw32-make -j15
在这里插入图片描述
成功画面
在这里插入图片描述
再运行mingw32-make install
在这里插入图片描述

引用运行

测试代码库:https://gitcode.com/chenbb1989/qt-opengl/tree/master/includeTest

qt项目下 .pro文件加入以下语句

INCLUDEPATH += 'C:/Program Files (x86)/OpenMesh/include'
DEPENDPATH += 'C:/Program Files (x86)/OpenMesh/include'

LIBS += -L'C:/Program Files (x86)/OpenMesh/lib/' -llibOpenMeshCore
#include "mainwindow.h"

#include <QApplication>
#include <QDebug>
#include<OpenMesh/Core/IO/MeshIO.hh>
#include<OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>


int main(int argc, char *argv[])
{
    using MyMesh = OpenMesh::TriMesh_ArrayKernelT<>;
    MyMesh mesh;
    MyMesh::VertexHandle vhandle[4];
    MyMesh::FaceHandle   fhandle;
	// 添加4个点
    vhandle[0] = mesh.add_vertex(MyMesh::Point(-1, -1,  1));
    vhandle[1] = mesh.add_vertex(MyMesh::Point( 1, -1,  1));
    vhandle[2] = mesh.add_vertex(MyMesh::Point( 1,  1,  1));
    vhandle[3] = mesh.add_vertex(MyMesh::Point(-1,  1,  1));

	// 添加4边形,会被自动分成2个三角形
    std::vector<MyMesh::VertexHandle>  face_vhandles;
    face_vhandles.push_back(vhandle[0]);
    face_vhandles.push_back(vhandle[1]);
    face_vhandles.push_back(vhandle[2]);
    face_vhandles.push_back(vhandle[3]);
    fhandle = mesh.add_face(face_vhandles);
    //OpenMesh::IO::read_mesh(mesh, "D:/selfad/qtapp/qt-with-open-gl/objects/rock/rock.obj");
    qDebug()<<mesh.n_vertices();
    qDebug()<<mesh.n_faces();
	return 0;
}

输出 
4
2

本人码农,希望通过自己的分享,让大家更容易学懂计算机知识。创作不易,帮忙点击公众号的链接。

Logo

欢迎加入西安开发者社区!我们致力于为西安地区的开发者提供学习、合作和成长的机会。参与我们的活动,与专家分享最新技术趋势,解决挑战,探索创新。加入我们,共同打造技术社区!

更多推荐