2010-04-08 3 views
1

부스트 MPI를 검사하는 내 configure.ac에서 사용할 autoconf 매크로를 검색하고 있습니다.Boost MPI 용 Autoconf 매크로?

인터넷에서 이들 중 몇 개를 찾는 것은 어렵지 않지만 예상 한대로 작동하지 않았습니다.

무엇을 ax_boost_mpi.m4합니까? 를 사용하십니까?

편집 : 내 요구 사항을 더 잘 설명하겠습니다. Boost MPI를 사용할 수 있는지 또는 컴파일러와 링커 플래그를 어딘가에 저장하고 컴파일러를 nornal C++ 컴파일러에서 사용 가능한 mpiCC 또는 mpiC++로 전환하려면 매크로가 필요합니까 (HAVE_BOOST_MPI 정의).

Boost MPI를 찾을 수없는 경우 오류가있는 구성 프로세스를 중지할지 또는 정의 된 HAVE_BOOST_MPI없이 g ++를 계속 사용할지 선택할 수 있기를 원합니다.

더하기, MPIRUN 변수를 정의해야 일부 검사를 실행할 수 있습니다.

답변

1
# =========================================================================== 
# 
# 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 <[email protected]> 
# 
# Copyright (c) 2010 Mirko Maischberger <[email protected]> 
# 
# 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([[email protected]<:@[email protected]:>@], 
        [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 
]) 
1

여기서는 턴키 솔루션을 알지 못하지만 사용할 수 없음을 의미하지는 않습니다.

어떤 작업을 통해 http://www.gnu.org/software/autoconf-archive/ax_mpi.html#ax_mpihttp://github.com/tsuna/boost.m4을 원하는대로 만들 수 있습니다. 전자는 MPI 컴파일러를 파고 후자는 Boost MPI를 검사합니다. boost.m4에 Boost MPI 검사를 추가해야합니다. 자신 만의 MPIRUN 검색 메커니즘을 추가해야합니다.

해결책을 찾거나 나 자신을 구한다면 공유하십시오.

+0

나는 내 자신을 굴려서 기능 요청을 tsuna/boost.m4 프로젝트에 제출했습니다. – baol

0

이 의견은 약간 늦지 만 동일한 주제를 검색하는 다른 사용자가 찾을 수 있도록 여기에 추가 할 예정입니다. 개인적으로 다른 boost 라이브러리 (BOOST_MPI_LDFLAGS, BOOST_MPI_LIBS)와 비슷한 변수를 정의한 boost.m4에 통합 된 함수를 찾고있었습니다. 그렇지 않으면를, 이미 (ax_mpi.m4, acx_mpi.m4 등으로) 정의되어있는 경우

https://github.com/tsuna/boost.m4/pull/50

이것은 CXX/CXXCPP에 대한 MPICXX 변수를 사용 : 나는 마지막 하나를 추가하고 여기에 끌어 오기 요청을 제출 기존 CXX/CXXCPP를 사용합니다.