在makefile中导出别名



我的机器上安装了Maven 3.6.3,我使用mvn来运行它。

我在.bashrc中定义了一个别名:alias mvn3=mvn现在我可以输入:

mvn3 dependency:copydependencies
现在,我有了一个makefile,其中包含以下命令:
dependencies:
mvn3 dependency:copydependencies

但是当我运行

make dependencies

我有以下错误:

mvn3 dependency:copy-dependencies
/bin/sh: 1: mvn3: not found

我不想改变Makefile。有什么好主意吗?

别名是交互式shell的一个特性。有很多方法可以强制解决这个问题,但到目前为止,最好的解决方案是将Makefile从您的个人交互式Bash配置中解耦。

如果您希望mvn的命令是可重写的,一个常见的约定是为命令使用make变量。

# you can override this with make MVN=/path/to/your/mvn or etc
MVN := mvn
dependencies:
$(MVN) dependency:copydependencies

…但在你的情况下,简单地硬编码mvn可能是完全可以接受的,实际上是一个更好的解决方案。

如果你绝对不想改变Makefile,你可以用一个shell函数(如果你需要它,它仍然需要以某种方式加载到非交互式shell中)或一个简单的包装器来替换别名:

#!/bin/sh
exec mvn "$@"

您将此脚本保存为mvn3,在PATHchmod +x的某个目录中。(一种常见的安排是为您的个人实用程序和包装器创建$HOME/bin,并确保您的shell配置为在交互式和非交互式shell中将此目录添加到PATH中。)

最新更新