1

私は Windows で make を使用しており、いくつかの変数を操作してファイル名を作成する必要があります。基本ファイル名と追加するオプションの部分があります。オプションの部分を追加する場合は、2 つの部分の間にアンダースコアを挿入する必要があります。オプションの部分はファイルから読み取られており、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))

これによりスペースが削除されますが、空の文字列を確認するのに苦労しています。

ありがとう

スティーブン

4

1 に答える 1

0

変数を引用符で囲んで比較しないでください。代わりにこれを試してください:

ifeq ($(STRIPPED_OPTIONAL_NAME),"")

上記は空の文字列をチェックします。

または

ifeq ($(STRIPPED_OPTIONAL_NAME)," ")

シングルスペースをチェックします。

于 2012-08-30T10:14:11.507 に答える