我有一个包含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.
你可以这样做(没有if
或else
)
-include Tool/Rules.mak
include 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