たいていのMPIライブラリには、伝統的にmpi{cc,f90,cxx}といったコンパイラのラッパーが付いています。-Iとか-Lとか-lを適当に設定したうえで、コンパイラを呼び出してくれる便利なものですが、
これが最終的に呼び出すコンパイラを切り替える方法がライブラリによってバラバラなので、ざっくりとまとめておきます。
IntelMPIの場合
コマンド名で呼び出すコンパイラを切り替えています。
mpicc: gcc or cc
mpicxx: g++
mpifc: gfortran
mpigcc: gcc
mpigxx: g++
mpif77: g77
mpif90: gfortran
mpiicc: icc
mpiicpc: icpc
mpiifort: ifort
mpich2, mpich, mvapich2の場合
mpicc,mpicxx,mpif77,mpif90に対してオプションを指定するか、環境変数でコマンド名を設定します。
mpicc: -cc={コンパイラ名} or MPICH_CC
mpicxx: -cxx={コンパイラ名} or MPICH_CXX
mpif77:-f77={コンパイラ名}, -fc={コンパイラ名} or MPICH_F77
mpif90 :-f90={コンパイラ名} or MPICH_F90
mvapich2も指定する環境変数はMPICH_XXなので注意*2
mpich3は未調査ですが、たぶん変わっていないでしょう。
OpenMPIの場合
環境変数でコマンド名を設定します。
mpicc: OMPI_CC
mpicxx: OMPI_CXX
mpif77: OMPI_F77
mpif90: OMPI_FC
使い方
IntelMPIみたいにコマンド名自体が違う場合や、mpich系のオプション指定を使う方法では、あまり気にしなくても良いんですが、環境変数でコンパイラを切り替える場合はmakefileがからむとちょっと面倒です。
駄目な例
OMPI_CC=icc
CC=mpicc
動作する例
CC="env OMPI_CC=icc mpicc"
要はmakefile内で環境変数を設定する方法が無いってのが問題なんですが、CCにenvを渡せば一応解決できます。*3
一時的に変更するのであれば、makeを実行するシェル上で環境変数を設定しても良いのですが、この設定を前提にコンパイル手順を決めると
とかいう間抜けな事態が発生するので、美しくないけどmakefile内に書いてしまうことをお勧めします。