![如何让 make 识别别名命令](https://linux22.com/image/1456179/%E5%A6%82%E4%BD%95%E8%AE%A9%20make%20%E8%AF%86%E5%88%AB%E5%88%AB%E5%90%8D%E5%91%BD%E4%BB%A4.png)
我正在安装穆格,当我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?
我怎样才能成功完成make
和make 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 进行任何特定于机器的更改。
符号链接技巧仅适用于仅更改命令名称的简单别名。如果您有一个包含一些默认参数的非试用别名,则符号链接技巧将不起作用。