C++ Boost MPI的Autoconf宏?

C++ Boost MPI的Autoconf宏?,c++,boost,mpi,autoconf,boost-mpi,C++,Boost,Mpi,Autoconf,Boost Mpi,我正在搜索一个autoconf宏,用于检查Boost MPI的configure.ac中 在互联网上找到几个并不难,但我试过的一个都没有达到预期效果 您使用什么ax\u boost\u mpi.m4 编辑:我会更好地解释我的要求。我需要宏来告诉我,如果MPI是可用的或不可用的(定义 HaveBooStupMPi ),以存储编译器和链接器标志,并将编译器从NordAL C++编译器转换为可用的MPICC或MPIC++。p> 如果找不到Boost MPI,我希望能够选择是要在出现错误时停止配置过程,

我正在搜索一个autoconf宏,用于检查Boost MPI的
configure.ac

在互联网上找到几个并不难,但我试过的一个都没有达到预期效果

您使用什么
ax\u boost\u mpi.m4

编辑:我会更好地解释我的要求。我需要宏来告诉我,如果MPI是可用的或不可用的(定义<代码> HaveBooStupMPi <代码>),以存储编译器和链接器标志,并将编译器从NordAL C++编译器转换为可用的MPICC或MPIC++。p> 如果找不到Boost MPI,我希望能够选择是要在出现错误时停止配置过程,还是在未定义\u Boost\u MPI的情况下继续使用g++


另外,它应该定义一个MPIRUN变量来允许运行一些检查。

我不知道这里有一个交钥匙解决方案,但这并不意味着一个不可用

通过一些工作,你可能会适应并做你想做的事情。前者挖掘MPI编译器,后者检查Boost MPI。您必须在Boost.m4中添加Boost MPI检查,因为它没有。您必须添加自己的MPIRUN搜索机制

如果您找到了解决方案和/或推出了自己的解决方案,请分享。

\===========================================================================
# ===========================================================================
#
# SYNOPSIS
#
#   AX_BOOST_MPI
#
# DESCRIPTION
#
#   Test for MPI library from the Boost C++ libraries. The macro
#   requires a preceding call to AX_BOOST_BASE, AX_BOOST_SERIALIZATION 
#   and AX_MPI. You also need to set CXX="$MPICXX" before calling the 
#   macro.
#
#   This macro calls:
#
#     AC_SUBST(BOOST_MPI_LIB)
#
#   And sets:
#
#     HAVE_BOOST_MPI
#
# LICENSE
#
#   Based on Boost Serialize by:
#   Copyright (c) 2008 Thomas Porschberg <thomas@randspringer.de>
#
#   Copyright (c) 2010 Mirko Maischberger <mirko.maischberger@gmail.com>
#
#   Copying and distribution of this file, with or without modification, are
#   permitted in any medium without royalty provided the copyright notice
#   and this notice are preserved. This file is offered as-is, without any
#   warranty.

#serial 1

AC_DEFUN([AX_BOOST_MPI],
[
    AC_ARG_WITH([boost-mpi],
    AS_HELP_STRING([--with-boost-mpi@<:@=special-lib@:>@],
                   [use the MPI library from boost - it is possible to 
                      specify a certain library for the linker
                      e.g. --with-boost-mpi=boost_mpi-gcc-mt-d-1_33_1 ]),
        [
        if test "$withval" = "no"; then
            want_boost="no"
        elif test "$withval" = "yes"; then
            want_boost="yes"
            ax_boost_user_mpi_lib=""
        else
            want_boost="yes"
            ax_boost_user_mpi_lib="$withval"
        fi
        ],
        [want_boost="yes"]
    )

    if test "x$want_boost" = "xyes"; then
        AC_REQUIRE([AC_PROG_CC])
        CPPFLAGS_SAVED="$CPPFLAGS"
        CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
        AC_MSG_WARN(BOOST_CPPFLAGS $BOOST_CPPFLAGS)
        export CPPFLAGS

        LDFLAGS_SAVED="$LDFLAGS"
        LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
        export LDFLAGS

        LIBS_SAVED="$LIBS"
        LIBS="$LIBS $BOOST_SERIALIZATION_LIB"
        export LIBS

        AC_CACHE_CHECK(whether the Boost::MPI library is available,
                       ax_cv_boost_mpi,
        [AC_LANG_PUSH([C++])
             AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[@%:@include <boost/mpi.hpp>
                                                ]],
                                   [[int argc = 0; 
                                     char **argv = 0;
                                     boost::mpi::environment env(argc,argv);
                                     return 0;
                                   ]]),
                   ax_cv_boost_mpi=yes, ax_cv_boost_mpi=no)
         AC_LANG_POP([C++])
        ])
        if test "x$ax_cv_boost_mpi" = "xyes"; then
            AC_DEFINE(HAVE_BOOST_MPI,,[define if the Boost::MPI library is available])
            BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'`
            if test "x$ax_boost_user_mpi_lib" = "x"; then
                for libextension in `ls $BOOSTLIBDIR/libboost_mpi*.{so,a}* 2>/dev/null | grep -v python | sed 's,.*/,,' | sed -e 's;^lib\(boost_mpi.*\)\.so.*$;\1;' -e 's;^lib\(boost_mpi.*\)\.a*$;\1;'` ; do
                     ax_lib=${libextension}
                    AC_CHECK_LIB($ax_lib, exit,
                                 [BOOST_MPI_LIB="-l$ax_lib"; AC_SUBST(BOOST_MPI_LIB) link_mpi="yes"; break],
                                 [link_mpi="no"])
                  done
                if test "x$link_mpi" != "xyes"; then
                for libextension in `ls $BOOSTLIBDIR/boost_mpi*.{dll,a}* 2>/dev/null | grep -v python | sed 's,.*/,,' | sed -e 's;^\(boost_mpi.*\)\.dll.*$;\1;' -e 's;^\(boost_mpi.*\)\.a*$;\1;'` ; do
                     ax_lib=${libextension} 
                    AC_CHECK_LIB($ax_lib, exit,
                                 [BOOST_MPI_LIB="-l$ax_lib"; AC_SUBST(BOOST_MPI_LIB) link_mpi="yes"; break],
                                 [link_mpi="no"])
                  done
                fi

            else
               for ax_lib in $ax_boost_user_mpi_lib boost_mpi-$ax_boost_user_mpi_lib; do
                      AC_CHECK_LIB($ax_lib, exit,
                                   [BOOST_MPI_LIB="-l$ax_lib"; AC_SUBST(BOOST_MPI_LIB) link_mpi="yes"; break],
                                   [link_mpi="no"])
                  done

            fi
            if test "x$link_mpi" != "xyes"; then
                AC_MSG_ERROR(Could not link against $ax_lib !)
            fi
        fi
        LIBS="$LIBS_SAVED"
        CPPFLAGS="$CPPFLAGS_SAVED"
        LDFLAGS="$LDFLAGS_SAVED"
    fi
])
# #概要 # #AX\u增压器\u MPI # #描述 # 从Boost C++库中对MPI库进行测试。宏 #需要对AX_BOOST_BASE、AX_BOOST_序列化的前面调用 #和斧头。在调用之前,还需要设置CXX=“$MPICXX” #宏。 # #此宏调用: # #AC_SUBST(BOOST_MPI_LIB) # #并设置: # #有_BOOST _MPI # #许可证 # #基于Boost Serialize by: #版权所有(c)2008 Thomas Porschberg # #版权所有(c)2010 Mirko Maischberger # #复制和分发此文件(无论是否进行修改)都是必要的 #允许在任何媒体中使用,无需版权声明中规定的版税 #本公告予以保留。此文件按原样提供,没有任何 #保证书。 #系列1 AC_DEFUN([AX_BOOST_MPI], [ 带([boost mpi]的交流参数, 作为\u帮助\u字符串([--with boost mpi@]), [使用boost中的MPI库-可以 指定链接器的特定库 e、 g.--带增压器mpi=boost\U mpi-gcc-mt-d-1\U 33\U 1]), [ 如果测试“$withval”=“否”;则 想要\u boost=“否” elif测试“$withval”=“是”;然后 想要\u boost=“是” ax_boost_user_mpi_lib=“” 其他的 想要\u boost=“是” ax_boost_user_mpi_lib=“$withval” fi ], [want_boost=“yes”] ) 如果测试“x$want\u boost”=“xyes”;则 AC_要求([AC_进度CC]) CPPFLAGS_SAVED=“$CPPFLAGS” CPPFLAGS=“$CPPFLAGS$BOOST\u CPPFLAGS” AC_MSG_WARN(BOOST_CPPFLAGS$BOOST_CPPFLAGS) 导出CPPSflags LDFLAGS_SAVED=“$LDFLAGS” LDFLAGS=“$LDFLAGS$BOOST\u LDFLAGS” 导出LDFLAGS LIBS_SAVED=“$LIBS” LIBS=“$LIBS$BOOST\u序列化\u LIB” 导出LIB AC_缓存检查(Boost::MPI库是否可用, ax\u cv\u boost\u mpi, [AC_LANG_PUSH([C++])) AC_COMPILE_IFELSE(AC_LANG_程序([[@]:@include ]], [[int argc=0; 字符**argv=0; boost::mpi::环境环境(argc,argv); 返回0; ]]), ax\u cv\u boost\u mpi=是,ax\u cv\u boost\u mpi=否) AC_LANG_POP([C++]) ]) 如果测试“x$ax\u cv\u boost\u mpi”=“xyes”;则 AC_DEFINE(拥有_BOOST_MPI,,[定义BOOST::MPI库是否可用]) BOOSTLIBDIR=`echo$BOOST\u LDFLAGS|sed-e's/@*/'` 如果测试“x$ax\u boost\u user\u mpi\u lib”=“x”;那么 对于'ls$BOOSTLIBDIR/libboost_-mpi*{so,a}*2>/dev/null | grep-v python | sed's、./、'| sed-e's;^lib\(boost_-mpi.*\)\.so.$\1;'-e's;^lib\(boost_-mpi.*\)\.a*$\1;'do ax_lib=${libextension} AC_CHECK_LIB($ax_LIB,exit, [BOOST\u MPI\u LIB=“-l$ax\u LIB”AC\u SUBST(BOOST\u MPI\u LIB)链接\u MPI=“yes”中断], [链接\u mpi=“否”]) 完成 如果测试“x$link\u mpi”!=“xyes”;则 对于'ls$BOOSTLIBDIR/boost\u mpi*{dll,a}*2>/dev/null | grep-v python | sed's,.*/,'| sed-e's;^\(boost\u mpi.*\)\.dll.$\1;'-e's;^\(boost\u mpi.*\)\.a*$$\1;'do ax_lib=${libextension} AC_CHECK_LIB($ax_LIB,exit, [BOOST\u MPI\u LIB=“-l$ax\u LIB”AC\u SUBST(BOOST\u MPI\u LIB)链接\u MPI=“yes”中断], [链接\u mpi=“否”]) 完成 fi 其他的 对于$ax\u boost\u user\u mpi\u lib boost\u mpi-$ax\u boost\u user\u mpi\u lib;do AC_CHECK_LIB($ax_LIB,exit, [BOOST\u MPI\u LIB=“-l$ax\u LIB”AC\u SUBST(BOOST\u MPI\u LIB)链接\u MPI=“yes”中断], [链接\u mpi=“否”]) 完成 fi 如果测试“x$link\u mpi”!=“xyes”;则 AC_MSG_错误(无法链接到$ax_lib!) fi fi LIBS=“$LIBS\u已保存” CPPFLAGS=“$CPPFLAGS\u已保存” LDFLAGS=“$LDFLAGS\u已保存” fi ])
此评论有点晚,但我将在此处添加它,以便其他搜索相同主题的人可以找到它。我个人一直在寻找一个集成到boost.m4中的函数,该函数定义了与其他boost库类似的变量(boost\u MPI\u LDFLAGS、boost\u MPI\u LIBS)。我最后只加了一个