CMakeはあなたのためにすべての重荷を取ります。あなたのCMakeLists.txtで
、代わりにfind_library(MPI)
を呼び出し、そのようfind_package
を使用します。
#### MPI
find_package(MPI REQUIRED)
if (MPI_FOUND)
include_directories(SYSTEM ${MPI_INCLUDE_PATH})
else (MPI_FOUND)
message(SEND_ERROR "This application cannot compile without MPI")
endif (MPI_FOUND)
次に、あなたがあなたのアプリケーション、${MPI_LIBRARIES}
に対するリンクをリンクどこ:
target_link_libraries(example-app ${MPI_LIBRARIES})
今cmakeのは、自動的になりますあなたのシステムに MPI実装が見つかりました。複数の異なるMPIバージョンを使用していて、どちらをコンパイルするかを指定する場合は、対応するmpicc
およびmpicxx
コンパイララッパーにMPI_C_COMPILER
およびMPI_CXX_COMPILER
変数を設定できます。 CMakeモジュールはそれらを使用して、必要なコンパイラとリンカのすべてのフラグを調べます。
例:
cmake -DMPI_C_COMPILER=/usr/share/mvapich/bin/mpicc your-project-dir
cmakeのが正しいMPIを使用していることを確認するには、新しい空のビルドディレクトリで開始します。ここFindMPIモジュール上の
詳細情報:https://cmake.org/cmake/help/v3.0/module/FindMPI.html
これは実際にそれを行うには非常に便利な方法です。 CMakeは 'MPI_C_INCLUDE_PATH'(ヘッダディレクトリへのパス)と' MPI_C_LIBRARIES'(.soライブラリファイルへのパス)(あるいはそのC++の対応物)を適切な値に設定する必要もあります。 – M4urice
@ M4uriceは必ずしも必要ではありません。 FindMPIモジュールは、コンパイララッパー 'mpicc'から直接それらのパスを取り出します。上記のリンクをクリックすると、これらの2つの可能性が説明されています。 1)パスを 'mpicc'ラッパーに渡すか、または2)手動でライブラリとリンクパスを手動で設定します。バージョン1は通常動作し、より簡単です。これはさらに、必要なリンカーとコンパイラフラグを減算するためです。 – Patrick
確かに、私は十分に具体的ではありませんでした。ポイント1が失敗したのでポイント2でこれを行う必要がありました。私がコンパイルしたMPIの実装は、システムパスにインストールされていないので、私のホームディレクトリのどこかに座っています。 – M4urice