以下 arch.make 文件中的这些行应该做什么?

以下 arch.make 文件中的这些行应该做什么?

我想在 Ubuntu 12.04 中安装 siesta (一个计算代码) 来并行运行。有一个 arch.make 文件,其部分内容如下:

    .SUFFIXES:
  .SUFFIXES: .f .F .o .a .f90 .F90

  SIESTA_ARCH=x86_64-unknown-linux-gnu--unknown

  FPP=
  FPP_OUTPUT=
  FC=/opt/pool/openmpi/bin/mpif90
  RANLIB=ranlib

  SYS=nag

  SP_KIND=4
  DP_KIND=8
  KINDS=$(SP_KIND) $(DP_KIND)

  FFLAGS=-g -O2
  FPPFLAGS= -DFC_HAVE_FLUSH -DFC_HAVE_ABORT -DGRID_DP -DPHI_GRID_SP -DMPI
  LDFLAGS=

  ARFLAGS_EXTRA=

  FCFLAGS_fixed_f=
  FCFLAGS_free_f90=
  FPPFLAGS_fixed_F=
  FPPFLAGS_free_F90=

  LIBPATH=/opt/pool/scalapack_installer-1.8.0

  BLAS_LIBS=/usr/lib/libf77blas.a /usr/lib/atlas/libblas.a
  LAPACK_LIBS=/usr/lib/atlas/liblapack.a
  BLACS_LIBS= -L$(LIBPATH) -lblacsF77 -lblacsC -lblacs
  SCALAPACK_LIBS=-lscalapack

  COMP_LIBS=

  NETCDF_LIBS=
  NETCDF_INTERFACE=

  LIBS=$(SCALAPACK_LIBS) $(BLACS_LIBS) $(LAPACK_LIBS) $(BLAS_LIBS) $(NETCDF_LIBS) -lpthread

  #SIESTA needs an F90 interface to MPI
  #This will give you SIESTA's own implementation
  #If your compiler vendor offers an alternative, you may change
  #to it here.
  MPI_INTERFACE=libmpi_f90.a
  MPI_INCLUDE=./include

因此,根据这一点。我有几个问题,请问:

1-以下几行是什么意思?(它们发生了什么?)(对于第二行,我不知道写入BLAS_LIBS并等于地址是什么意思。)

.SUFFIXES: .f .F .o .a .f90 .F90
BLAS_LIBS=/usr/lib/libf77blas.a /usr/lib/atlas/libblas.a

2-以下几行中等号后面应该写什么?

 FPP=
  FPP_OUTPUT=
NETCDF_LIBS=

3-下一行等号右边的表达式应该被替换成什么?如果是,应该写什么?!

LIBS=$(SCALAPACK_LIBS) $(BLACS_LIBS) $(LAPACK_LIBS) $(BLAS_LIBS) $(NETCDF_LIBS)

我了解一些 bash 脚本的基础知识,并且熟悉 Linux 中的命令行。我看过几门关于 bash 脚本的培训课程,但我仍然感到困惑!!

谢谢你的帮助。

答案1

Makefile 中的规则.SUFFIXES决定了编译期间使用哪些隐式规则。这里不打算详细解释,但你可以在第 2 章中阅读你想知道的一切规则在 O'Reilly 的使用 GNU Make 管理项目,第三版,作者:Robert Mecklenburg

关于变量的分配,例如,,FPP您需要参考软件自己的文档来确定这些变量的合适值 - 我们可能会FPP_OUTPUTNETCDF_LIBS猜测基于FPP代表 Fortran 预处理器的上下文(类似于CPP),但这绝不是保证。


你的潜在问题似乎是“如何在 Ubuntu 12.04 上构建 siesta 计算化学软件?”。以下是对我有用的方法(YMMV - 取决于您的系统上安装了哪些预先存在的软件):

  1. 安装先决条件 - 对我来说,这些是 Fortran 编译器,以及 BLAS 和 LAPACK 库的常规和 MPI 版本,我按照如下方式进行操作

    sudo apt-get install gfortran libatlas-dev liblapack-dev libscalapack-mpi-dev
    
  2. 解压软件并切换到Obj目录

    tar xf siesta-4.1-b1.tar.gz
    cd siesta-4.1-b1/Obj
    
  3. 如文件所示Obj/README,运行提供的脚本来填充目录,

    ../Src/obj_setup.sh
    
  4. 按照脚本的建议,运行提供的配置脚本来创建合适的arch.make文件

    ../Src/configure
    

    如果你现在仍然对问题 (2) 和 (3) 的答案感兴趣,你可以查看创建的arch.make文件以查看自动配置的值

  5. 构建软件

    此时,您应该已准备好make,但是配置步骤似乎并未完全解决所有问题,因为它失败并显示以下消息

    SIESTA: dc_lapack.a has been deprecated in favor of:
      COMP_LIBS += libsiestaLAPACK.a
    Please update your arch.make file accordingly...
    

    虽然你可以编辑文件,恕我直言,这么小的改变在命令行arch.make上传递变量定义更简单make

    make "COMP_LIBS += libsiestaLAPACK.a"
    
  6. 如果构建成功完成,您可以通过切换到目录Obj/Testsmake在那里运行来运行提供的测试

    cd Tests/
    make
    

测试可能比构建花费更多的时间。

相关内容