我正在尝试编写一个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。
答案 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