如何使用 find_path 在特定目录中查找 mpicc 和 mpicxx?

How to find mpicc and mpicxx in specific directory using find_path?

我想找到mpiccmpicxx的路径,将CMAKE_CXX_COMPILERCMAKE_C_COMPILER设为mpiccmpicxx . mpiccmpicxx 存储在两个目录中(mpi 的两个实现),我在 cmake 中使用 find_path() 来查找路径,但返回的目录是不是正确的目录。这是我的代码:

FIND_PATH(MPI_INTEL_C mpicc $ENV{PATH})
FIND_PATH(MPI_INTEL_CXX mpicxx $ENV{PATH})

MESSAGE(STATUS "MPI_INTEL_C: ${MPI_INTEL_C}")
MESSAGE(STATUS "MPI_INTEL_CXX: ${MPI_INTEL_CXX}")

IF(MPI_INTEL_C AND MPI_INTEL_CXX)
    MESSAGE(STATUS "Intel MPI compiler is used.")
    SET(CMAKE_CXX_COMPILER mpicxx)
    SET(CMAKE_C_COMPILER mpicc)
ELSE(MPI_INTEL_C AND MPI_INTEL_CXX)
    MESSAGE(FATAL_ERROR "mpicc and mpicxx not found.")
ENDIF(MPI_INTEL_C AND MPI_INTEL_CXX)

返回的(错误的)目录是:

-- MPI_INTEL_C: /export/ictce3.1/impi/3.1/bin64
-- MPI_INTEL_CXX: /export/ictce3.1/impi/3.1/bin64

$ENV{PATH}是:

/export/mpi/mpich_intel/bin:/export/ictce3.1/impi/3.1/bin64:/export/ictce3.1/itac/7.1/bin:/export/ictce3.1//fce/10.1.015/bin:/export/ictce3.1//cce/10.1.015/bin:/export/ictce3.1//idbe/10.1.015/bin:/export/mpi/mpich_intel/bin:/export/ictce3.1/impi/3.1/bin64:/export/ictce3.1/itac/7.1/bin:/export/ictce3.1//fce/10.1.015/bin:/export/ictce3.1//cce/10.1.015/bin:/export/ictce3.1//idbe/10.1.015/bin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/java/jdk1.6.0_03/bin:/usr/java/jdk1.6.0_03/jre/bin:/usr/local/jakarta-tomcat-4.1.18/bin:/export/mpi/mpich_intel/include:/export/mpi/mpich_intel/lib:/export/ictce3.1/cce/10.1.015/lib:/export/ictce3.1/cce/10.1.015/bin:/export/ljrs/bin:/export/ljrs/sbin

而mpicc和mpicxx的正确目录是:

-- MPI_INTEL_C: /export/mpi/mpich_intel/bin
-- MPI_INTEL_CXX: /export/mpi/mpich_intel/bin

我这样试过:

FIND_PATH(MPI_INTEL_C mpicc PATHS /export/mpi/mpich_intel/bin)
FIND_PATH(MPI_INTEL_CXX mpicxx PATHS /export/mpi/mpich_intel/bin)

但仍然得到错误的目录。那么如何在具体目录下找到mpicc和mpicxx呢?

使用CMake提供的FindMPI.cmake。如果失败,请相应地设置 CMAKE_PREFIX_PATH

文档:https://cmake.org/cmake/help/v3.5/module/FindMPI.html

您不应将 CMAKE_CXX_COMPILER 设置为 MPI 包装器,而应让 CMake 找出正确的标志。