2014-05-17 60 views
2

我想写一个Makefile来评估Bash命令的结果,例如unameMakefile ifeq在OS X上使用Bash命令

的Makefile:

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 

我如何比较的ifeq内部变量OS1或命令$(uname)字面Darwin?从我读过的内容来看,我的Makefile中的第二个ifeq应该可以工作,但事实并非如此。

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

回答

2

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

首先,我不知道不同的方式,变量在GNU被分配做: 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 
+1

正确的'shell'但是'OS = $(shell uname)'很好。 –