在包含makefile之前检查它是否存在



我有一个包含Rules的makefile。创建包含我想使用的工具的文件。问题是,如果他们想提取一个版本或使用"本地"安装,工具文件夹有免费选项。所以我想包含工具提取的规则,如果它存在,否则我想包含本地文件。

像这样的东西是目标:

if Tool/Rules.mak exists then
  include Tool/Rules.mak
else
  include common/Rules-Tool.mak
fi

我尝试过bash方式或make方式,但由于这是预先包含的设置环境,所以我没有特定的目标,但由于检查失败而导致调用错误。

if [ -f Tool/Rules.mak ]
then
echo testfile exists!
fi

if [ -d ./Tool ]
then
echo testfile exists!
fi

以及带有引号和类似内容的版本。问题是,几乎所有时候,当我输入make,我得到以下错误:

Rules.mak:14: *** missing separator.  Stop.    

你可以这样做(没有ifelse)

-include Tool/Rules.mak
include common/Rules-Tool
像这样的

,你不会得到一个错误,如果工具/规则。马克不存在。("-"起作用)

在common/Rules-Tool中,你可以使用?=操作符("条件变量赋值操作符")给变量赋值。只有当变量不存在时,该操作符才会赋值。因此,它不会覆盖预先存在的值。如果工具/规则。

标记不存在或只是部分填充变量common/Rules-Tool将完成它们。

如果出于某种原因您不想使用?=操作符(也许您有比设置变量更多的操作),那么您可以这样做if..then..else..fi:

ifneq ("$(wildcard Tool/Rules.mak)","")
  $(info using Tools/Rules.mak)
  include Tool/Rules.mak
else
  $(info using common/Rules-Tool.mak)
  include common/Rules-Tool.mak
endif

最新更新