Makefile:测试存在的目录并找到第一个

我正在使用makefile来编译MATLAB / C项目. MATLAB通常可以安装到许多标准位置,具体取决于其版本,例如: /Applications/MATLAB_2012b.app,/Applications/MATLAB_2013a.app等.

什么是最简单的方法来查看这些路径是否一个接一个存在,并找到第一个路径?我想测试至少五个值.我找到了$(通配符文件名)语法,但我想知道是否有什么比逐个写出来的更短.

根据要求澄清.我可以拼凑一些有用的东西,但我确信这远非最好/最简洁的方法.有没有更好的办法?

ifeq ($(MATLAB),)
ifneq ($(wildcard /Applications/MATLAB_2011b.app),)
    MATLAB = /Applications/MATLAB_2011b.app
endif
endif

ifeq ($(MATLAB),)
ifneq ($(wildcard /Applications/MATLAB_2012a.app),)
    MATLAB = /Applications/MATLAB_2012a.app
endif
endif

ifeq ($(MATLAB),)
ifneq ($(wildcard /Applications/MATLAB_2012b.app),)
    MATLAB = /Applications/MATLAB_2012b.app
endif
endif

ifeq ($(MATLAB),)
ifneq ($(wildcard /Applications/MATLAB_2013a.app),)
    MATLAB = /Applications/MATLAB_2013a.app
endif
endif

最佳答案 如果存在,您可以获得第一个这样的目录

MATLAB_DIR := $(firstword $(wildcard /Applications/MATLAB_*.app))

如果它不存在,则变量将为空

ifeq (,$(MATLAB_DIR))
  $(error Matlab not found)
endif

如果您的路径有空格,则可以使用shell.像这样的东西可能会起作用:

MATLAB_DIR := $(shell ls -d /Applications/MATLAB_*.app | tail -n 1)
点赞