2016-08-30 128 views
0

我有以下的别名,由按项目的项目时,它简化了我的工作流程:指定与环境变量的makefile

alias mk='make -f ${ACTIVE_MAKEFILE}' 

一些背景资料:makefile文件是在一个单独的目录,所有一起,与相关名称他们提到的项目。我没有让他们在项目目录,因为:

  1. 他们是我的私人的makefile,我不希望他们承诺回购
  2. 其实我是想跟踪的变化,所以他们必须在回购。为此我有一个umbrella项目。

这工作正常......但:我失去了完成。做mk <TAB>不会显示可用的Makefile目标,因此使用别名实际上使我的工作流效率降低。

我认为不是告诉使得使用特定的makefile与-f标志,我可以设置一个环境变量来告诉做出了这一点,是这样的:

export MAKEFILE=my-makefile 

然后在命令:

make 

会自动使用我的my-makefile。由于该命令没有改变,自动完成将继续工作。

但无论该选项不存在,或我无法找到,让使用选择Makefile

我可以设置哪些环境变量(如果有的话)环境变量来告诉make到的名称使用特定的makefile?

+0

您是否考虑在指向目录之外的目录中使用名为makefile(或Makefile,或GNUMakefile,或甚至是'delavnog.mk',以便您可以将env var设置为固定名称)的符号链接makefile是相关的,并且只是确保你的VCS忽略本地符号链接,因此它不会被推送到中央仓库? –

+0

而且,作为另一种选择,使用shell脚本而不是别名“dlnmk”,它使用规则来为您定位makefile。开销很小,你可以将自己的想法封装在一个脚本中,所以你不必再考虑它了。 –

+0

@JonathanLeffler:你的第一个建议适合我的用例。谢谢!你想补充说,作为答案?我会很乐意接受。 – dangonfast

回答

1

两个选项原本建议在注释:

  1. 你有没有考虑开创了一个固定的,统一的名称每个目录符号链接(也可称为makefileMakefile,甚至delavnog.mk)指向相关的目录外的makefile?您的别名然后只是使用这个固定名称,并确保您的VCS忽略本地符号链接,因此它不被推送到中央存储库?

  2. 作为一种替代方案,使用shell脚本(可能是dlnmk)而不是别名,并使用这些规则来为您找到makefile(因此脚本确定了makefile的正确名称和位置以及然后用正确的-f选项调用make)。开销很小,你可以将自己的想法封装在一个脚本中,所以你不必再考虑它了。

在这两者中,我可能会使用脚本,但我会在一滴帽子下写脚本。我目前在我的$HOME/bin目录中有大约400个脚本,并且在关联的RCS目录中保存了将近900个脚本 - 我已经这样做了一段时间,Git不是前20年左右的选项(因为它没有存在)。