3

makefileに可変ストップポイントが定義されています。Makefileからのawkの出力を使用してこの変数を設定したいと思います。

2番目の引数がメインかどうかを確認したい

私が試してみました:

stoppoint = $(awk '$$2 ~ /main/ {print $$1}' file)  
stoppoint = "$(awk '$$2 ~ /main/ {print $$1}' file)"  
stoppoint = 'awk '$$2 ~ /main/ {print $$1}' file'
awk '$$2 ~ /main/ {print $$1}' file > stoppoint
awk '$$2 ~ /main/ {print $$1}' file > $(stoppoint)

ただし、この変数を設定できません。Makefile内でawkを使用して変数を設定する方法を教えてください

PS:コマンドラインで、awkコマンドは私が望む出力を私に与えます...

ありがとう、テハス

4

6 に答える 6

5

フランス語の引用符を使用する必要があります( ``)

次に例を示します。

all:
    @a=`echo "hello world!!" | awk '{print $0;}' -`; echo $$a;
于 2012-09-21T21:16:59.540 に答える
2

eval次のような構造を使用する必要があります。

.PHONY: default
default: all

rule1:
    $(eval GLOBAL_VAR=`awk '$$2 ~ /main/ {print $$1}' file`)

all: rule1
    @echo "The global var is: $(GLOBAL_VAR)"

evalは、文字列をmakefile構文として評価します。ここでは、GLOBAL_VAR変数をシェル関数呼び出しの結果に設定します。シェル関数呼び出しは、グローバルであることを示すために別のルールで出力されます。

于 2015-06-09T22:10:36.303 に答える
1

解決策は簡単です:Makefileはフォーマットを想定しました

ターゲット:依存関係の後に次の行にアクションが続くTAB

TAB上記の場合、アクションであると想定しているため、次の行に変数を設定することはできません。を削除しTABて設定するだけです。それは問題を解決するでしょう

于 2012-09-24T21:22:05.930 に答える
0

今の私のやり方は次のとおりです。

@awk '$$2 ~ /main/ {print $$1}' inputfile > DUMP

0x60000078それは私にダンプ内の値を与えます

そしてそれを使用するには:

@echo -e "set pc $(shell cat DUMP)" > testfile

これで私の問題は解決したようですが、誰かが私にもっと良い解決策を教えてくれることを願っています。

ありがとう、

テジャス

于 2012-09-21T23:07:24.733 に答える
0

この問題を回避するために必要なのは、次のようshellに呼び出すときにキーワードを使用することでした。awk

VARIABLE="$(shell awk '__awk script__' file-awk-processes)"

それが役に立てば幸い!

于 2017-11-07T12:46:02.773 に答える
0

makefileでawkを使用するための別のオプション、$$の使用:

VERSION=`awk '/version:/{print $$NF}' charts/Chart.yaml`
于 2022-01-06T14:26:40.083 に答える