如何让 make 识别别名命令

如何让 make 识别别名命令

我正在安装穆格,当我make -f Makefile.maclap收到错误时:

$ make -f Makefile.maclap
g77 -w   -c -o Abfind.o Abfind.f
make: g77: No such file or directory
make: *** [Abfind.o] Error 1

经过在线研究,我认为,由于我有 gcc-5,所以命令 g77 在我的计算机上不存在。

因此,我根据一个堆栈交换问题,alias g77=/usr/local/bin/gfortran-5尝试使用 gfortran 编译 fortran 代码。

现在,当我g77看到时gfortran-5: fatal error: no input files compilation terminated,表明正在g77作为编译工作。

但是当我make -f Makefile.maclap仍然收到错误时:

$ make -f Makefile.maclap
g77 -w   -c -o Abfind.o Abfind.f
make: g77: No such file or directory
make: *** [Abfind.o] Error 1

如何让 make 命令使用 fortran-5 来编译文件 Abfind.o 和 Abfind.f?

我怎样才能成功完成makemake install步骤以运行该软件包?

答案1

如果您不想像@Thomas 建议的那样创建符号链接,您基本上可以在 Makefile 中创建一个别名,方法是将此行放在 Makefile 顶部附近的某个位置:

G77 := /usr/local/bin/gfortran-5

然后,在你的目标的某个地方,像这样使用它:

$(G77) -w -c -o Abfind.o Abfind.f

答案2

make计划只会实际上是文件(或目录)的名称。它对 shell 别名一无所知。

如果您的 中alias有 ,而不是,那么它将起作用。在许多环境中,如果您有一个目录,它将自动添加到您的。(如果没有,手动执行此操作很简单,具体细节取决于您的 shell)。g77$PATH$HOME/bin$PATH

如果是比较简单的情况:

cd
mkdir bin
cd bin
ln -s /usr/local/bin/gfortran-5 g77

然后注销,并重新登录(让shell的初始化脚本更新路径等)

答案3

只需使用 make 的 shell 命令。

$(g77 -w -c -o Abfind.o Abfind.f)

通过将整个命令包装在 $() 中,它会像 shell 执行它一样执行它。如果您在具有别名的机器上运行它,就像您的机器一样,别名将起作用。如果您在本机安装了 g77 的机器上运行它,那么它也会起作用。

这是解决你的问题的可移植方法,并且不需要对你的 makefile 进行任何特定于机器的更改。

符号链接技巧仅适用于仅更改命令名称的简单别名。如果您有一个包含一些默认参数的非试用别名,则符号链接技巧将不起作用。

相关内容