CMake ModulesにおけるCheckFortranFunctionExists:詳細解説とサンプルコード

2024-04-04

CMakeのModulesにおけるCheckFortranFunctionExists解説

マクロの使い方

CheckFortranFunctionExistsマクロは以下の形式で使用します。

CheckFortranFunctionExists(FUNCTION_NAME [VARIABLE_NAME])
  • FUNCTION_NAME: チェックするFortran関数の名前
  • VARIABLE_NAME (オプション): 関数が見つかった場合に設定される変数の名前 (省略可)

VARIABLE_NAMEを省略した場合、FUNCTION_NAMEと同じ名前の変数が設定されます。

マクロの動作

CheckFortranFunctionExistsマクロは以下の動作を行います。

  1. 指定されたFortran関数が存在するかどうかをチェックします。
  2. 関数が見つかった場合、VARIABLE_NAME変数にTRUEを設定します。

使用例

以下の例は、CheckFortranFunctionExistsマクロを使用して、fmax関数の存在をチェックする例です。

CheckFortranFunctionExists(fmax FMAX_FOUND)

if(FMAX_FOUND)
  message(STATUS "fmax function found")
else()
  message(STATUS "fmax function not found")
endif()

この例では、fmax関数が見つかった場合、FMAX_FOUND変数にTRUEが設定され、messageコマンドによってメッセージが出力されます。

注意事項

  • CheckFortranFunctionExistsマクロは、Fortranコンパイラが正しく設定されていることを前提としています。
  • マクロは、Fortran関数の名前のみをチェックします。関数の引数や戻り値の型はチェックされません。

補足

  • CMakeのModulesには、CheckFortranFunctionExists以外にも、Fortran関連の様々なマクロが用意されています。詳細はCMakeドキュメントを参照してください。
  • Fortranコードをビルドするプロジェクトにおいては、CMake以外にも様々なツールが使用できます。詳細は各ツールのドキュメントを参照してください。


CMakeのModulesにおけるCheckFortranFunctionExistsサンプルコード

基本的な使用例

CheckFortranFunctionExists(fmax FMAX_FOUND)

if(FMAX_FOUND)
  message(STATUS "fmax function found")
else()
  message(STATUS "fmax function not found")
endif()

この例は、fmax関数の存在をチェックし、見つかった場合はメッセージを出力します。

引数付き関数のチェック

CheckFortranFunctionExists(fmin FMIN_FOUND
                          ARG1 DOUBLE ARG2 DOUBLE)

if(FMIN_FOUND)
  message(STATUS "fmin function found")
else()
  message(STATUS "fmin function not found")
endif()

この例は、fmin関数の存在をチェックし、引数がDOUBLE型の2つであることを確認します。

戻り値の型のチェック

CheckFortranFunctionExists(sqrt SQRT_FOUND
                          RETURN_VALUE DOUBLE)

if(SQRT_FOUND)
  message(STATUS "sqrt function found")
else()
  message(STATUS "sqrt function not found")
endif()

この例は、sqrt関数の存在をチェックし、戻り値の型がDOUBLEであることを確認します。

複数の関数のチェック

CheckFortranFunctionExists(fmax FMAX_FOUND)
CheckFortranFunctionExists(fmin FMIN_FOUND)

if(FMAX_FOUND AND FMIN_FOUND)
  message(STATUS "fmax and fmin functions found")
else()
  message(STATUS "fmax and fmin functions not found")
endif()

この例は、fmax関数とfmin関数の存在を同時にチェックします。

メッセージの出力

CheckFortranFunctionExists(fmax FMAX_FOUND)

if(FMAX_FOUND)
  message(STATUS "fmax function found")
else()
  message(FATAL_ERROR "fmax function not found")
endif()

この例は、fmax関数が見つからなかった場合、エラーメッセージを出力してビルドを中止します。

  • 上記のサンプルコードは、あくまでも基本的な使用方法を示すものです。
  • 詳細については、CMakeドキュメントを参照してください。


Fortran関数の存在をチェックする他の方法

手動でチェックする

最も簡単な方法は、Fortranコードを直接見て、必要な関数が存在するかどうかを確認することです。ただし、この方法はコード量が多い場合や、複数のFortranファイルを使用している場合に は、手間がかかります。

Fortranコンパイラのコマンドラインオプションを使用する

多くのFortranコンパイラは、-fcheckなどのコマンドラインオプションを使用して、関数の存在をチェックすることができます。この方法は、CheckFortranFunctionExistsマクロよりも高速に動作 する場合がありますが、コンパイラによってオプションの使用方法が異なるため、注意が必要です。

Fortran用のビルドツールを使用する

CMake以外にも、AutomakeSconsなどのFortran用のビルドツールがあります。これらのツールは、Fortran関数の存在をチェックする機能を備えているものがあります。

Fortran用のライブラリを使用する

LAPACKやBLASなどのFortran用のライブラリは、多くのFortran関数を提供しています。これらのライブラリを使用する場合は、必要な関数がライブラリに含まれているかどうかを確認する必要があります。

どの方法を使用するべきかは、プロジェクトの規模や複雑性、使用しているツールなどによって異なります。

  • コード量が少ない場合は、手動でチェックする方法が最も簡単です。
  • コード量が多い場合や、複数のFortranファイルを使用している場合は、CheckFortranFunctionExistsマクロなどの自動化ツールを使用すると便利です。
  • 高速な動作が必要な場合は、Fortranコンパイラのコマンドラインオプションを使用する方法を検討することができます。

Fortran関数の存在をチェックする方法はいくつかあります。どの方法を使用するべきかは、プロジェクトの状況に合わせて選択してください。

  • Fortranコンパイラのドキュメント
  • Fortran用のビルドツールのドキュメント
  • Fortran用のライブラリのドキュメント



CMakeの「Commands」における「cmake_path()」関数

試合形式試合時間は前半40分、後半40分の計80分です。ハーフタイムは15分以内です。試合は2チームで行われ、それぞれ15人の選手がフィールドに出ます。選手は、ボールを持って走る、パスする、キックするなどのプレーができます。相手選手をタックルして倒すこともできます。



CMake: find_library()とtarget_link_directories()の連携

target_link_directories()コマンドは、CMakeプロジェクト内のターゲットに対して、リンカがライブラリを検索するディレクトリを指定するために使用されます。これは、ターゲットがリンクするライブラリが標準の検索パスに存在しない場合に特に重要です。


CMakeコマンド mark_as_advanced() の詳細解説

mark_as_advanced() は、CMakeプロジェクトで特定のキャッシュ変数を "詳細設定" としてマークするために使用されるコマンドです。このコマンドによって、GUI ツールでこれらの変数はデフォルトでは表示されなくなり、ユーザーは "詳細設定" オプションを有効にするまで編集できなくなります。


CMake の if() コマンド: デバッグとトラブルシューティング

構文条件式if() コマンドの引数には、条件式を指定します。条件式は、以下のいずれかの形式で記述できます。変数の比較: <variable> <operator> <value>コマンドの存在チェック: COMMAND <command-name>


CMake try_compile() を使って特定のライブラリがインストールされているかどうかを確認する方法

try_compile() は、CMake の強力なコマンドの一つで、コードを実際にコンパイルすることなく、コンパイルが成功するかどうかを確認することができます。これは、特定のコンパイラやオプションがシステム上で使用可能かどうかをテストしたり、コードの移植性を検証したりする際に非常に便利です。



さよならFindSDL_netモジュール!SDL_netライブラリを手動設定する方法

CMake モジュール「FindSDL_net」は、SDL_net ライブラリの開発に必要なヘッダーファイルとライブラリファイルを自動的に検索して設定する機能を提供します。SDL_net は、ネットワークアプリケーション開発用のクロスプラットフォームライブラリです。


【初心者向け】CMakeの「CMP0040」エラーを回避する方法:詳細と解決策

CMakeポリシー「CMP0040」は、add_custom_command()コマンドで指定されたターゲットが、現在のディレクトリ内に存在し、かつ定義されていることを確認するものです。このポリシーは、CMake 3.0で導入され、以下の2つの動作モードを持ちます。


CMake の CMAKE_LANG_COMPILER_ARCHITECTURE_ID 変数を使いこなす

CMAKE_LANG_COMPILER_ARCHITECTURE_ID は、CMake の内部変数であり、コンパイラの ターゲットアーキテクチャ を識別するために使用されます。これは、主に特定のコンパイラに対して、適切な使用方法を決定するために必要となります。


CMake の CMAKE_GENERATOR_TOOLSET 変数に関する FAQ

CMAKE_GENERATOR_TOOLSET は CMake の変数であり、特定のジェネレータが使用するネイティブビルドシステムのツールセットを指定します。これは、特定のコンパイラやツールチェーンを選択したり、ビルドプロセスをカスタマイズしたりするために使用できます。


GCC-XMLを使ってC++ソースコードからXMLドキュメントを生成する

FindGCCXMLは、CMakeのモジュールの一つで、GCC-XMLフロントエンドの実行ファイルを検出するためのものです。このモジュールは、以下の変数を定義します。GCCXML: GCC-XMLの実行ファイルへのパスGCCXML_FOUND: GCC-XMLが見つかったかどうかを示すブール値