我得到了在集群上运行的代码,.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/