linux - 运行 MPI fortran 代码示例 make 文件

标签 linux makefile fortran

我得到了在集群上运行的代码,.sh文件内容如下:

compiler  =  mpifort

in8.3     =  mac-ns-2d.8.3.f90

out       =  a.out

inc       =  hypre/include

libs      =  src/hypre/lib

opts      =  -O4

8.3:
    $(compiler) $(opts) -I$(inc) $(in8.3) -o $(out) -L$(libs) -lHYPRE -lm -lstdc++

我看到第一行是什么,这是我的编译器 mpifortran,但是第二行是什么意思,in8.3? 我也知道 out、inc、libs 的含义,但是 opts -04 的目的是什么,8.3: 以及后面的行是什么意思?

最佳答案

这是一个标准的 Unix Makefile,但它使用了奇怪的变量名称。

前几行都是作业:

compiler  =  mpifort
in8.3     =  mac-ns-2d.8.3.f90
out       =  a.out
inc       =  hypre/include
libs      =  src/hypre/lib
opts      =  -O4

这些基本上将字符串分配给变量。例如,稍后在 Makefile 中,可以使用 $(out) 并替换为 a.out。这是收集可能需要调整的所有内容的一种常见方法稍后比如使用什么编译器、使用什么编译标志等等。

您具体询问了opts。该变量的值为 -O4,它是一个启用“优化级别 4”的编译器标志(通常是最高优化级别,但请检查编译器手册)。

接下来的两行是目标和构建目标的规则:

8.3:
    $(compiler) $(opts) -I$(inc) $(in8.3) -o $(out) -L$(libs) -lHYPRE -lm -lstdc++

这两行中的第二行应该用一个制表符缩进。

我不会描述什么是目标以及创建目标的规则是什么,只是说 make 将使用指定的规则“创建”Makefile 的第一个目标。目标可能具有依赖关系(其他目标),在运行顶级目标的规则之前需要考虑这些依赖关系。这里的情况并非如此。

如您所见,最后一行使用之前定义的变量来编译程序。

运行 make 将产生:

$ make
mpifort -O4 -Ihypre/include mac-ns-2d.8.3.f90 -o a.out -Lsrc/hypre/lib -lHYPRE -lm -lstdc++
mpifort: not found
*** Error 1 in /tmp/shell-ksh.l1TMWqET (Makefile:14 '8.3')

由于我没有安装 mpifort (编译器),因此我收到一条错误消息,但您还可以看到 make 尝试执行的命令。这对应于该 Makefile 的最后一行,所有变量都替换为它们的值。

我建议您查找有关 make 和 Makefile 的教程。

关于linux - 运行 MPI fortran 代码示例 make 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46060256/

相关文章:

arrays - 使用 C 指针时,Fortran 数组中的更改会导致另一个数组的更改

linux - 熔丝文件系统指示不应打开文件

linux - $!不适用于最后一个 fork 进程的 PID

c++ - makefile 和 gtkmm 的问题

C++ 从 dll 调用 FORTRAN 子程序

optimization - 使用-fast编译时,波特兰组FORTRAN pgf90程序失败,-fast -Mnounroll成功时,

linux - 使用 perl 在电子邮件正文中嵌入 excel 图表

c++ - dbus-c++ 中的断言错误,终止进程

makefile - Makefile 如何使用单独的目录来存放源代码和二进制文件?

c++ - 构建 veins_inet 子项目时出错