Makefile中的变量目标基于条件

时间:2016-05-20 14:14:50

标签: makefile

我正在尝试使用make来跨平台管理我的开发机器。我想检查机器上是否安装了ipython,如果没有安装它。 ipython安装的路径在OSX和Linux之间是不同的。

我尝试设置如下变量,但似乎忽略变量(可能超出范围?)。

ifeq ($(UNAME_S),Linux)
    IPYTHON_BIN=/usr/bin/ipython
endif
ifeq ($(UNAME_S),Darwin)
    IPYTHON_BIN=/usr/local/bin/ipython
endif

ipython: $(IPYTHON_BIN) $(IPYTHON_CONFIG)

$(IPYTHON_BIN):
    pip install ipython

还有另一种方法可以实现这一点,还是有另一种简单的解决办法?

1 个答案:

答案 0 :(得分:0)

您可能已经省略了尝试指定名称的代码 您的操作系统为UNAME_S,并且操作错误。或者你可能 我们错误地认为您的操作系统名称是自动生成的 已分配到您环境中的UNAME_S

无论如何,你会达到你想要的目标:

UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
    IPYTHON_BIN:=/usr/bin/ipython
endif
ifeq ($(UNAME_S),Darwin)
    IPYTHON_BIN:=/usr/local/bin/ipython
endif
ifndef IPYTHON_BIN
$(error Unknown OS)
endif
...
....

这也会导致make错误地输出:

*** Unknown OS. Stop

如果您的操作系统不在受支持的设置中。