如何使用 find_path 在特定目录中查找 mpicc 和 mpicxx?
How to find mpicc and mpicxx in specific directory using find_path?
我想找到mpicc
和mpicxx
的路径,将CMAKE_CXX_COMPILER
和CMAKE_C_COMPILER
设为mpicc
和mpicxx
. mpicc
和 mpicxx
存储在两个目录中(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 找出正确的标志。
我想找到mpicc
和mpicxx
的路径,将CMAKE_CXX_COMPILER
和CMAKE_C_COMPILER
设为mpicc
和mpicxx
. mpicc
和 mpicxx
存储在两个目录中(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 找出正确的标志。