Gmsh SDKの使い方 with C++, CMake
環境
- 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
に配置した。
README.txt
によると、ABI互換がないC++コンパイラを使う際には、gmsh.h_cwrap
をgmsh.h
と置き換える必要があるとのこと。
元のgmsh.h
を使うより若干性能が落ちる?
If your C++ compiler does not have a compatible ABI and if there are no
compatibility flags available, you can renamegmsh.h_cwrap
asgmsh.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 originalgmsh.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
フォルダの中の操作。
-
gmsh.h
をgmsh.h.org
に名前変更 -
gmsh.h_cwrap
をgmsh.h
に名前変更
CMakeプロジェクトの作成
適当なフォルダをVSCodeで開く。
以下VSCode上での操作。
Ctrl+Shift+P
でコマンドパレットを開き、CMake: Quick Start
を選択。
自身の環境に応じたコンパイラを選択。ここではamd64
を選択した。
プロジェクト名はgmsh_test
にした。
exe
ファイルを作りたいのでExecutable
を選択。lib
やdll
を作りたい場合は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
-------------------------------------------------------
Discussion