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没有设置它)。你从哪里想到要设置它的?文档中没有描述它,等等。如果你想设置它,你必须自己设置。