Makefile 在OS X上未正确检测到OSTYPE

Makefile 在OS X上未正确检测到OSTYPE,makefile,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") CHR

我的
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
案例。想法


如果这很重要的话,我是特立独行的。

那应该是
,否则如果eq
,你可能需要达尔文而不是达尔文(取决于$(OSTYPE)的分配方式

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

这里有很多问题;第一个也是最重要的问题是,您没有向我们展示如何获得
OSTYPE
的值,因此很难确切地知道需要进行哪些更改

第一个问题是,正如suspectus所说,正确的格式是
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
在GNU make 3.81及更高版本中可用,因此请确保您没有使用旧版本


最后一个可能的问题是make正在进行文本比较,它对shell引用一无所知。您正在将
$(OSTYPE)
“linux gnu”之类的值进行比较
,这包括引号。因此
OSTYPE
变量的值最好也包括双引号,否则这些值永远不会匹配。

我是
Makefile
的新手。
OSTYPE
似乎没有在任何地方设置。我假设它是
Make
的东西?不。Make没有设置该变量(至少,GNU make没有设置它)。你从哪里想到要设置它的?文档中没有描述它,等等。如果你想设置它,你必须自己设置。