我的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
案例。想法?
我是小牛队,如果重要的话。
答案 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
变量的值更好地包括双引号,否则这些值将永远不会匹配。