makefileでのエスケープ


87

私はこれをメイクファイルで行おうとしていますが、ひどく失敗します:

M_ARCH := $(shell g++ -dumpmachine | awk '{split($1,a,"-");print a[1]}')

なぜなのかご存知ですか?私はそれが逃げることと関係があると思います、しかし何とどこで?


5
どのように失敗しますか?どのようなエラーメッセージが表示されますか?あなたはそれが何をすることを期待していますか?

回答:


163

これはドル記号です。メイクファイルでは$$、1つのドル記号を取得するために入力する必要があります。

M_ARCH := $(shell g++ -dumpmachine | awk '{split($$1,a,"-");print a[1]}')

133
ええ、作るのはお金の無駄です。1つ$を手に入れるには2つ入れなければなりません。
p Shved 2010年

8
@PavelShved私は一度もメイクにお金を払ったことがありません。:)
Trevor Hickey 2012年

検索の一部としてこの回答を見つけた人にとっては、コメントの先頭として使用される「#」文字にも問題があります。これらの場合、バックスラッシュ「\#」でエスケープする必要があります。
ジムモンテ

16

あなたがそれに取り掛かるとき、メイクはかなりしなやかです。これは同じことをする非awkバージョンです:

space := $() #

M_ARCH := $(firstword $(subst -,$(space),$(shell g++ -dumpmachine)))

all:
    $(info $(M_ARCH))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.