2012-08-30 37 views
1

我在Windows中使用make,我需要操作一些变量来创建文件名。我有一个基本文件名和一个可选部分来追加。如果附加了可选部分,则应在两部分之间插入下划线。可选部分正在从文件读入,并包含5个字符(空格或字母数字)。如果不是空白,去掉变量中的所有空格并追加到另一个变量

这是我所期待的工作:

OPTIONAL_NAME="  " 
BASE_NAME=myfile 
STRIPPED_OPTIONAL_NAME=$(strip $(OPTIONAL_NAME)) 
ifeq ("$(STRIPPED_OPTIONAL_NAME)","") 
FULL_NAME=$(BASE_NAME) 
else 
FULL_NAME=$(BASE_NAME)_$(STRIPPED_OPTIONAL_NAME) 
endif 

OPTIONAL_NAME可以有以下值:

OPTIONAL_NAME="  " 
OPTIONAL_NAME="ABCDE" 
OPTIONAL_NAME="A " 
OPTIONAL_NAME=" A " 
OPTIONAL_NAME=" A" 

OPTIONAL_NAME的价值周围有引号,由于它要导入的方式(看到我以前的问题 - Read a value from a file into a variable)。

结果的问题是strip似乎将多个空间减少为单个空格,但实际上并未删除前导或尾随空格。

我已经使用这个剥除空间尝试:

space:= 
space+= 
STRIPPED_OPTIONAL_NAME=$(subst $(space),,$(OPTIONAL_NAME)) 

这并删除空格,但我很难检查一个空字符串。

感谢

斯蒂芬

回答

0

你不应该把变量在引号的比较。试试这个:

ifeq ($(STRIPPED_OPTIONAL_NAME),"") 

以上检查为空字符串。

或者

ifeq ($(STRIPPED_OPTIONAL_NAME)," ") 

检查空单。

+0

嗨Joachim,不幸的是这并不适合我。如果'OPTIONAL_NAME =“”'then ifeq($(STRIPPED_OPTIONAL_NAME),)'解析为false。是否有可能导致我的环境出现问题? – sclarke81

+0

@ sclarke81更新了我的答案。 –

+0

这很完美。谢谢! – sclarke81