在OS X上未正确检测到OSTYPE

时间:2014-04-07 21:59:42

标签: makefile

我的Makefile有:

ifeq ($(OSTYPE), "linux-gnu")
  CHROMEDRIVER_EXE?=$(shell pwd)/vendor/selenium/chromedriver.linux.64
elseifeq ($(OSTYPE), "darwin")
  CHROMEDRIVER_EXE?=$(shell pwd)/vendor/selenium/chromedriver.mac
elseifeq ($(OSTYPE), "cygwin")
    CHROMEDRIVER_EXE?=$(shell pwd)/vendor/selenium/chromedriver.exe
elseifeq ($(OSTYPE), "msys")
  CHROMEDRIVER_EXE?=$(shell pwd)/vendor/selenium/chromedriver.exe
elseifeq ($(OSTYPE), "win32")
  CHROMEDRIVER_EXE?=$(shell pwd)/vendor/selenium/chromedriver.exe
elseifeq ($(OSTYPE), "freebsd")
  CHROMEDRIVER_EXE?=$(shell pwd)/vendor/selenium/chromedriver.linux.64
else
    CHROMEDRIVER_EXE?=$(shell pwd)/vendor/selenium/chromedriver.NOTFOUND
endif

出于某种原因,我得到了NOTFOUND案例。想法?

我是小牛队,如果重要的话。

2 个答案:

答案 0 :(得分:1)

那应该是else ifeq并且你可能需要Darwin而不是darwin(取决于如何分配$(OSTYPE)。例如

else ifeq ($(OSTYPE), "Darwin")
  CHROMEDRIVER_EXE?=$(shell pwd)/vendor/selenium/chromedriver.mac

答案 1 :(得分:1)

这里有很多问题;第一个也是最重要的一点是你没有向我们展示如何获得OSTYPE的价值,因此很难确切知道你需要做出哪些改变。

第一个问题是,正如嫌疑人所说,正确的格式是else ifeq而不是elseifeq。因为第一个ifeq不匹配而其他语句不被make识别,所以你基本上写了这个:

ifeq ($(OSTYPE), "linux-gnu")
    CHROMEDRIVER_EXE?=$(shell pwd)/vendor/selenium/chromedriver.linux.64
    ...a whole bunch of other stuff make doesn't care about...
else
    CHROMEDRIVER_EXE?=$(shell pwd)/vendor/selenium/chromedriver.NOTFOUND
endif

如果您尝试在OSTYPE的值与第一个ifeq匹配的情况下运行此操作,则会出现大量语法错误。

第二个潜在的问题是格式else <condition>仅在GNU make 3.81及更高版本中可用,因此请确保您没有使用旧版本。

最后可能的问题是make正在进行文本比较,并且它对shell引用一无所知。您正在将$(OSTYPE)"linux-gnu"等值进行比较,而包含引号。因此,OSTYPE变量的值更好地包括双引号,否则这些值将永远不会匹配。