欢迎关注更多精彩
关注我,学习常用算法与数据结构,一题多解,降维打击。
背景
- 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_PROGRAM | C:/Qt/Qt5.12.11/Tools/mingw730_64/bin/mingw32-make.exe |
CMAKE_C_COMPILER | C:/Qt/Qt5.12.11/Tools/mingw730_64/bin/gcc.exe |
CMAKE_CXX_COMPILER | C:/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
本人码农,希望通过自己的分享,让大家更容易学懂计算机知识。创作不易,帮忙点击公众号的链接。