在Makefile中查找适当的可执行文件

时间:2015-12-23 22:21:51

标签: makefile

我正在编写一个需要执行程序foo1的Makefile,它通常由操作系统提供。某些操作系统为此二进制文件提供了不同的名称foo2

我正在试图弄清楚如何最好地测试正确的可执行文件,如果两者都不存在则存在。我有一些方法,但它们看起来都很难看,我想可能有更合适的方法来做到这一点。

我试过了:

FOO = $(shell which foo foo2)

target:
   @which $(FOO) > /dev/null
   $(FOO)

我发现这不是很优雅,因为如果系统中同时存在foofoo2which实际上会返回两行。我调用which两次并且当我没有将任何内容传递给第二个which时依赖于发出的错误也很奇怪。

简而言之,有什么更好的方式?

1 个答案:

答案 0 :(得分:1)

如下:

FOO := $(firstword $(shell which foo foo1))
ifeq ($(FOO),)
  $(error Cannot find foo or foo1)
endif

target:
        $(FOO)

或者如果你不喜欢使用make的error功能,你可以使用:

target:
        @[ -n "$(FOO)" ] || { echo "Cannot find foo or foo1"; exit 1; }

请注意,如果您的PATH中有任何包含空格的路径名,则此功能无效...但无论如何这都是一个要解决的问题。