在OS X上使用Bash命令创建makefile ifeq

时间:2014-05-17 12:00:54

标签: macos bash makefile gnu-make

我正在尝试编写一个Makefile来评估来自Bash命令的结果,例如uname

生成文件:

OS1 = $(uname)
OS2 = Darwin

all:
    @echo $(value OS1)

ifeq ($(uname),Darwin)
    @echo "OK"
else
    @echo "Fail"
endif

ifeq ($(OS1),Darwin)
    @echo "OK"
else
    @echo "Fail"
endif

ifeq ($(OS2),Darwin)
    @echo "OK"
else
    @echo "Fail"
endif

输出:

Darwin
Fail
Fail
OK

如何将变量OS1或命令$(uname)Darwin内的文字ifeq进行比较?根据我的阅读,我的Makefile中的第二个ifeq应该有效,但它没有。

我在OS X 10.9.3上使用GNU Make 3.81 for i386-apple-darwin11.3.0。

1 个答案:

答案 0 :(得分:2)

关于Makefile,变量和shell命令,有很多不同的问题和答案。但事实证明,查看手册有时比搜索Stackoverflow更可靠。

首先,我不知道在GNU make中分配变量的不同方法: https://www.gnu.org/software/make/manual/make.html#Reading-Makefiles

其次,shell函数(在这种情况下是必需的)仅与:=(立即)运算符结合使用: https://www.gnu.org/software/make/manual/make.html#Shell-Function

因此正确的Makefile如下所示:

OS := $(shell uname)

all:
    @echo $(OS)

ifeq ($(shell uname),Darwin)
    @echo "OK"
else
    @echo "Fail"
endif

ifeq ($(OS),Darwin)
    @echo "OK"
else
    @echo "Fail"
endif