2012-08-30 73 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