📄 acx_mpi.m4
字号:
dnl @synopsis ACX_MPI([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])dnldnl This macro tries to find out how to compile programs thatdnl use MPI (Message Passing Interface), a standard API fordnl parallel process communication (see http://www-unix.mcs.anl.gov/mpi/)dnldnl On success, it sets the MPICC, MPICXX, or MPIF77 output variable todnl the name of the MPI compiler, depending upon the current language.dnl (This may just be $CC/$CXX/$F77, but is more often something likednl mpicc/mpiCC/mpif77.) It also sets MPILIBS to any libraries that arednl needed for linking MPI (e.g. -lmpi, if a special MPICC/MPICXX/MPIF77dnl was not found).dnldnl If you want to compile everything with MPI, you should set:dnldnl CC="$MPICC" #OR# CXX="$MPICXX" #OR# F77="$MPIF77"dnl LIBS="$MPILIBS $LIBS"dnldnl The user can force a particular library/compiler by setting thednl MPICC/MPICXX/MPIF77 and/or MPILIBS environment variables.dnldnl ACTION-IF-FOUND is a list of shell commands to run if an MPIdnl library is found, and ACTION-IF-NOT-FOUND is a list of commandsdnl to run it if it is not found. If ACTION-IF-FOUND is not specified,dnl the default action will define HAVE_MPI.dnldnl @version $Id: acx_mpi.m4,v 1.5 2002/10/24 05:08:52 stevenj Exp $dnl @author Steven G. Johnson <stevenj@alum.mit.edu>AC_DEFUN([ACX_MPI], [AC_PREREQ(2.50) dnl for AC_LANG_CASEAC_LANG_CASE([C], [ AC_REQUIRE([AC_PROG_CC]) AC_CHECK_PROGS(MPICC, mpicc hcc mpcc mpcc_r mpxlc, $CC) acx_mpi_save_CC="$CC" CC="$MPICC" AC_SUBST(MPICC)],[C++], [ AC_REQUIRE([AC_PROG_CXX]) AC_CHECK_PROGS(MPICXX, mpiCC mpCC, $CXX) acx_mpi_save_CXX="$CXX" CXX="$MPICXX" AC_SUBST(MPICXX)],[Fortran 77], [ AC_REQUIRE([AC_PROG_F77]) AC_CHECK_PROGS(MPIF77, mpif77 hf77 mpxlf mpf77 mpif90 mpf90 mpxlf90 mpxlf95 mpxlf_r, $F77) acx_mpi_save_F77="$F77" F77="$MPIF77" AC_SUBST(MPIF77)])if test x = x"$MPILIBS"; then AC_LANG_CASE([C], [AC_CHECK_FUNC(MPI_Init, [MPILIBS=" "])], [C++], [AC_CHECK_FUNC(MPI_Init, [MPILIBS=" "])], [Fortran 77], [AC_MSG_CHECKING([for MPI_Init]) AC_TRY_LINK([],[ call MPI_Init], [MPILIBS=" " AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)])])fiif test x = x"$MPILIBS"; then AC_CHECK_LIB(mpi, MPI_Init, [MPILIBS="-lmpi"])fiif test x = x"$MPILIBS"; then AC_CHECK_LIB(mpich, MPI_Init, [MPILIBS="-lmpich"])fidnl We have to use AC_TRY_COMPILE and not AC_CHECK_HEADER because thednl latter uses $CPP, not $CC (which may be mpicc).AC_LANG_CASE([C], [if test x != x"$MPILIBS"; then AC_MSG_CHECKING([for mpi.h]) AC_TRY_COMPILE([#include <mpi.h>],[],[AC_MSG_RESULT(yes)], [MPILIBS="" AC_MSG_RESULT(no)])fi],[C++], [if test x != x"$MPILIBS"; then AC_MSG_CHECKING([for mpi.h]) AC_TRY_COMPILE([#include <mpi.h>],[],[AC_MSG_RESULT(yes)], [MPILIBS="" AC_MSG_RESULT(no)])fi])AC_LANG_CASE([C], [CC="$acx_mpi_save_CC"], [C++], [CXX="$acx_mpi_save_CXX"], [Fortran 77], [F77="$acx_mpi_save_F77"])AC_SUBST(MPILIBS)# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:if test x = x"$MPILIBS"; then $2 :else ifelse([$1],,[AC_DEFINE(HAVE_MPI,1,[Define if you have the MPI library.])],[$1]) :fi])dnl ACX_MPI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -