我想编写一个Makefile来安装go程序和其他资产,所以我想要一个installdir
。我想检查是否设置了GOBIN,GOPATH,如果没有设置,希望用户输入安装目录。
我写了如下的Makefile,但是makefile变量installdir为空。 echo
不输出任何内容。
installdir:=$(shell echo $(GOPATH) | cut -d':' -f1)
all: *.go
@GO111MODULE=on GOPATH=$(GOPATH) go build -o trpc main.go
install:
ifeq ($(installdir),)
installdir=$(shell echo $(GOBIN) | cut -d':' -f1)
endif
ifeq ($(installdir),)
installdir=$(shell bash -c 'read -s -p "Please input installdir: " tmpdir; echo $$tmpdir')
endif
echo $(installdir)
请帮助!
$(installdir)
可能不是完全为空,但其内容为空白。为了进行检查,您可以将最后一个命令优化为@echo "install dir is '$(installdir)'"
,然后检查简单引号之间是否存在某些内容。如果真是这样,那么GNU make的strip
函数就派上用场了。引用the manual:
strip
函数与条件语句结合使用时非常有用。当使用‘’
或ifeq
比较带有空字符串ifneq
的内容时,通常希望仅一个空格的字符串与空字符串匹配(请参阅条件)。因此,使用
ifeq ("$(strip $(installdir))","")
或类似的东西应该可以得到预期的结果。