如何从标准输入读入makefile变量

问题描述 投票:0回答:1

我想编写一个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)

请帮助!

makefile
1个回答
0
投票

$(installdir)可能不是完全为空,但其内容为空白。为了进行检查,您可以将最后一个命令优化为@echo "install dir is '$(installdir)'",然后检查简单引号之间是否存在某些内容。如果真是这样,那么GNU make的strip函数就派上用场了。引用the manual

strip函数与条件语句结合使用时非常有用。当使用‘’ifeq比较带有空字符串ifneq的内容时,通常希望仅一个空格的字符串与空字符串匹配(请参阅条件)。

因此,使用ifeq ("$(strip $(installdir))","")或类似的东西应该可以得到预期的结果。

© www.soinside.com 2019 - 2024. All rights reserved.