7

そのため、一部の匿名の開発者は、ソース ファイルを含むフォルダー名にスペースを使用するというばかげた規則を使用することにしました。スペースを使用しないようにこれらのフォルダーを変更しますが、残念ながらここではルールを作成していないため、それはオプションではありません (そうなればいいのですが)。

LUAC            = luac

SRC_DIR         = .
SOURCE          =                                                      \
stupid/naming\ convention/a.lua                                        \
stupid/naming\ convention/very\ annoying/b.lua                         \

vpath .lua $(SRC_DIR)

OUT_DIR         = ../out/
OUTPUT          = $(patsubst %.lua, $(OUT_DIR)/%.luac, $(SOURCE))


all: $(OUTPUT)

$(OUT_DIR)/%.luac: %.lua
    $(LUAC) "$<"
    mv luac.out "$@"

.PHONY: all

簡単なメイクファイル。目的は、私が持っているすべての Lua ファイルをコンパイルして、それらを出力ディレクトリに配置することだけです。

私が何をしてもSOURCE、フォルダー内のスペースで文字列を分割したいので、次のような美しいエラーで終了します。

make: *** No rule to make target `stupid/naming ', needed by `all'.  Stop.

フォルダの名前を変更せずにこれを修正する方法はありますか?

前もって感謝します。

4

4 に答える 4

5

非常に短いが、IMO の最終的に正しい答えは、make (GNU make だけでなく、すべての POSIX スタイルの make 実装) が空白を含むパス名をサポートしていないということです。make を使用したい場合、「匿名の開発者」はそれらを使用できません。これが絶対的な要件であると主張する場合は、ファイル名の空白をサポートする別のビルド ツールに完全に切り替える必要があります。

はい、空白を含むファイル名で動作するメイクファイルを作成することはほとんど不可能ですが、基本的にすべてのメイクファイルを最初から書き直す必要があり、GNU make の多くの機能を使用できないため、メイクファイルは長くて読みにくく、維持するのが難しい。

彼らに自分自身を乗り越えるように言ってください。または、本当にできない場合は、名前に空白を含まないパス名でワークスペースを作成してから、実際のワークスペースを指す空白を含むシンボリック リンクを作成してもらいます (逆の方法はすべての状況で機能するとは限りません)。

于 2013-07-31T11:50:37.747 に答える
0

http://www.cmcrossroads.com/article/gnu-make-meets-file-names-spaces-themという優れた記事を見ると、著者は、これはほとんど難しい作業であると示唆しています。しかし、彼の置換関数は、スペースを本当に避けられない場合に備えて、うまくいく可能性があります.

これをメイクファイルに入れると、次のようになります (パスの一部を変更した場合は申し訳ありませんが、Cygwin のインストールでは機能します)。

LUAC            = luac

s+ = $(subst \\ ,+,$1)
+s = $(subst +,\ ,$1) 

SRC_DIR  = .
SOURCE  := stupid/naming\\ convention/a.lua 
SOURCE := $(call s+,$(SOURCE)) 

vpath .lua $(SRC_DIR)

OUT_DIR         = out/
OUTPUT          = $(patsubst %.lua, $(OUT_DIR)/%.luac, $(SOURCE))

all: $(call +s,$(OUTPUT))

$(OUT_DIR)/%.luac: %.lua
    $(LUAC) "$<"
    mv luac.out "$@"

.PHONY: all

それが完全な答えではないことはわかっていますが、実際に可能であるという励みになるかもしれません. しかし、実際にスペースを完全に避けることができれば、人生がずっと楽になるという他のポスターに同意します!

于 2013-07-31T22:32:49.063 に答える