本文主要讲解如何利用cmake进行配置带图形界面的gmsh,因为gmsh给出的qt范例只有简单的显示功能,而对 fltk中编写了较完整的功能,所以利用fltk进行说明,如需qt可参考链接。本文使用的编译器是vs2019
首先为了编译成功gmsh软件,我们需要先编译fltk,再编译gmsh。
我的编译环境:vs2019 professional+fltk1.3.5+gmsh
编译fltk
先下载fltk,解压,新建目录build,打开cmake,进行如下配置,配置好source code和build 目录,点击configure,修改CMAKE_INSTALL_PREFIX,然后点击generate,然后点击open project,如果你是初次使用cmake,选择你想使用的编译器即可。
再vs2019内打开该项目后,点击本地调试器,所有项目生成成功后,在解决方案资源管理器中,选择INSTALL项目,右键选择生成,即在指定的CMAKE_INSTALL_PREFIX目录安装了fltk,在该目录下可以看到如下文件:
编译gmsh
下载gmsh源码解压,同样配置好source code和build安装目录,然后点击add_entry,添加如下的entry,这一步是为gmsh中指定fltk依赖路径,Value就是刚才fltk的安装目录.
然后点击configure,出现错误:
修改gmsh源码路径下的cmakelist.txt文件,修改495行为: #enable_language(Fortran)
再次点击configure,没有错误后,点击generate,生成成功后,点击open project
在vs内运行该项目,出现大量类似错误:
error C7555: 使用指定的初始值设定项至少需要“/std:c++latest”
发现出错原因均来自gmsh soruce code下的contrib/hxt,先移除hxt文件夹。
再次点击configure,generate,运行该项目,成功运行出图形界面。
其它小伙伴尝试发现的错误
在编译gmsh的时候,出现如下错误:
他们的解决方案都是手动添加fltk的静态链接路径:(路径在刚刚编译好的fltk目录下)
谢谢以上两位小伙伴的帮助!!!
其它注意点
- 由于gmsh源码目录下有tutorial,该目录下有t1.cpp,利用cmake进行编译时,也会生成t1.sln
但是在运行时会出现错误,如:
MSVCRT.lib(exe_winmain.obj) : error LNK2019: 无法解析的外部符号 WinMain,该符号在函数 "int __cdecl __scrt_common_main_seh(void)" (?__sc
rt_common_main_seh@@YAHXZ) 中被引用
出现原因是t1.cpp是控制台程序,入口函数是main,而vs编译器默认windows程序,入口函数为WinMain,在解决方案资源管理器中,选中t1,t1…x1项目,右键项目属性,在链接器–>系统–>选择subsystem :console即可 - fltk自带opengl支持 ,但如果编译时提示说不支持opengl,在项目-链接器—输入—附加依赖项:添加OpenGL32.lib 和 glut32.lib