2014-05-17 88 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)'很好。 –