2

mingw32 を使用して、makefile でスラッシュを含むファイル名をバック スラッシュを含むファイル名に変換する必要があります。次の sed コマンドを使用して、結果を変数に格納しました。

ORIGINAL=./a/b/main1.c ./a/b/main2.c ./a/b/main3.c

コマンド:

RESULT=$(shell echo $(ORIGINAL) | sed 's/\//\\/g')

結果の出力は次のとおりです。

.\a\b\main1.c .abmain2.c .abmain3.c

bashで直接実行すると問題なく動作します。誰が何が悪いのか教えてもらえますか?

ありがとう!

4

3 に答える 3

8

メイクファイルでテストを複製しようとしていますが、環境がありません。ただし、同じ文字を検索する場合は、「/」をコマンド セパレータとして使用しません。「:」などの別の文字を使用してください

sed 's:/:\\:g'
于 2013-05-30T19:53:45.050 に答える
6
RESULT=$(sed 's/\//\\/g' <<< "$ORIGINAL")


$ ORIGINAL='./a/b/main1.c ./a/b/main2.c ./a/b/main3.c'
$ echo "$ORIGINAL"
./a/b/main1.c ./a/b/main2.c ./a/b/main3.c
$ RESULT=$(sed 's/\//\\/g' <<< "$ORIGINAL")
$ echo $RESULT
.\a\b\main1.c .\a\b\main2.c .\a\b\main3.c
于 2013-05-30T18:32:31.053 に答える
3

ほとんどの場合、make が呼び出しているシェルは bash ではありません。ただし、どのシェルでも見られる動作は非常に奇妙です(最初の単語で置き換えられますが、残りは置き換えられません?!?!)

シェルの代わりにGNUmakeの関数を使用することを検討しましたか?$(subst ...)

于 2013-05-30T18:32:20.007 に答える