😺

Gmsh SDKの使い方 with C++, CMake

2023/04/20に公開

環境

  • Windows11
  • CMake 3.26.3
  • Gmsh 4.11.1
  • C++ Compiler: Visual Studio 2022 Community 17.5.3
  • IDE: Visual Studio Code
    • CMake関連の拡張機能をインストールしておく

SDKのインストール

ここからSDKをダウンロードし、解凍して適当な場所に配置。
本記事ではC:/Gmsh/gmsh-4.11.1-Windows64-sdkに配置した。

https://gmsh.info

README.txtによると、ABI互換がないC++コンパイラを使う際には、gmsh.h_cwrapgmsh.hと置き換える必要があるとのこと。

元のgmsh.hを使うより若干性能が落ちる?

If your C++ compiler does not have a compatible ABI and if there are no
compatibility flags available, you can rename gmsh.h_cwrap as gmsh.h:
this implementation redefines the C++ API in terms of the C API. Using this
header will lead to (slightly) reduced performance compared to using the
native Gmsh C++ API from the original gmsh.h header, as it entails
additional data copies between this C++ wrapper, the C API and the native
C++ code.

今回の環境では元のgmsh.hを使ってもリンクエラーが出たため、置き換えを行う。

以下、C:/Gmsh/gmsh-4.11.1-Windows64-sdk/include フォルダの中の操作。

  1. gmsh.hgmsh.h.orgに名前変更
  2. gmsh.h_cwrapgmsh.hに名前変更

CMakeプロジェクトの作成

適当なフォルダをVSCodeで開く。

以下VSCode上での操作。

Ctrl+Shift+Pでコマンドパレットを開き、CMake: Quick Startを選択。

自身の環境に応じたコンパイラを選択。ここではamd64を選択した。

プロジェクト名はgmsh_testにした。

exeファイルを作りたいのでExecutableを選択。libdllを作りたい場合はLibraryを選択。

完了するとこのような画面になる。

CMakeLists.txtの編集

ここではC:/Gmsh/gmsh-4.11.1-Windows64-sdk/tutorials/c++/t1.cppをコンパイル対象とする。

C:/Gmsh/gmsh-4.11.1-Windows64-sdk/share/doc/gmsh/examples/ にもサンプルがたくさんあるので実行してみると良い。

cmake_minimum_required(VERSION 3.0.0)
project(gmsh_test VERSION 0.1.0)

#----------------------------------------------------------------------------------
# SDKを配置したフォルダ
#----------------------------------------------------------------------------------

set(GMSH_ROOT "C:/Gmsh/gmsh-4.11.1-Windows64-sdk")

#----------------------------------------------------------------------------------
# CMake設定
#----------------------------------------------------------------------------------

add_executable(${PROJECT_NAME} 
    # ここのファイル名を変えれば様々なサンプルを実行できる
    ${GMSH_ROOT}/share/doc/gmsh/tutorials/c++/t1.cpp
)

target_include_directories(${PROJECT_NAME} PRIVATE
    ${GMSH_ROOT}/include
)

target_link_directories(${PROJECT_NAME} PRIVATE
    ${GMSH_ROOT}/bin
    ${GMSH_ROOT}/lib
)

target_link_libraries(${PROJECT_NAME} PRIVATE
    gmsh.lib
)

set(OUTPUT_DIR ${CMAKE_BINARY_DIR}/bin)

set_target_properties(${PROJECT_NAME}
    PROPERTIES
    ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib
    LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib
    RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_DIR}
)


#----------------------------------------------------------------------------------
# DLLとリソースファイルのコピー
#----------------------------------------------------------------------------------

file(GLOB geo_files ${GMSH_ROOT}/share/doc/gmsh/tutorials/*.geo)
file(GLOB msh_files ${GMSH_ROOT}/share/doc/gmsh/tutorials/*.msh)
file(GLOB png_files ${GMSH_ROOT}/share/doc/gmsh/tutorials/*.png)
file(GLOB pos_files ${GMSH_ROOT}/share/doc/gmsh/tutorials/*.pos)
file(GLOB step_files ${GMSH_ROOT}/share/doc/gmsh/tutorials/*.step)
file(GLOB stl_files ${GMSH_ROOT}/share/doc/gmsh/tutorials/*.stl)

add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
  COMMAND ${CMAKE_COMMAND} -E copy ${GMSH_ROOT}/lib/gmsh-4.11.dll ${OUTPUT_DIR}
  COMMAND ${CMAKE_COMMAND} -E copy ${geo_files} ${OUTPUT_DIR}/../
  COMMAND ${CMAKE_COMMAND} -E copy ${msh_files} ${OUTPUT_DIR}/../
  COMMAND ${CMAKE_COMMAND} -E copy ${png_files} ${OUTPUT_DIR}/../
  COMMAND ${CMAKE_COMMAND} -E copy ${pos_files} ${OUTPUT_DIR}/../
  COMMAND ${CMAKE_COMMAND} -E copy ${step_files} ${OUTPUT_DIR}/../
  COMMAND ${CMAKE_COMMAND} -E copy ${stl_files} ${OUTPUT_DIR}/../
)

実行

Shift+F5で実行。以下の画面が出現する。

ターミナルには次のように表示される。

License       : GNU General Public License
Build OS      : Windows64-sdk
Build date    : 20221221
Build host    : gmsh.info
Build options : 64Bit ALGLIB[contrib] ANN[contrib] Bamg Blas[petsc] Blossom Cgns DIntegration DomHex Eigen[contrib] Fltk Gmm[contrib] Hxt Jpeg Kbipack Lapack[petsc] MathEx[contrib] Med Mesh Metis[contrib] Mmg Mpeg Netgen NoSocklenT ONELAB ONELABMetamodel OpenCASCADE OpenCASCADE-CAF OpenGL OpenMP OptHom PETSc Parser Plugins Png Post QuadMeshingTools QuadTri Solver TetGen/BR Voro++[contrib] WinslowUntangler Zlib    
FLTK version  : 1.4.0
PETSc version : 3.15.0 (real arithmtic)
OCC version   : 7.6.1
MED version   : 4.1.0
Packaged by   : nt authority system
Web site      : https://gmsh.info
Issue tracker : https://gitlab.onelab.info/gmsh/gmsh/issues
-------------------------------------------------------

おまけ:サンプル実行結果集

${GMSH_ROOT}/share/doc/gmsh/tutorials/c++/t2.cpp

${GMSH_ROOT}/share/doc/gmsh/tutorials/c++/t3.cpp

${GMSH_ROOT}/share/doc/gmsh/tutorials/c++/t4.cpp

${GMSH_ROOT}/share/doc/gmsh/examples/api/adapt_mesh.cpp

GitHubで編集を提案

Discussion