C++ Boost MPI的Autoconf宏?
我正在搜索一个autoconf宏,用于检查Boost MPI的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,我希望能够选择是要在出现错误时停止配置过程,
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)。我最后只加了一个