2

以下のmakeファイルを検討してください

全て:
     @ for x in yz; \
     行う \
          bc の a の場合。\
          行う \
                   echo $$x$$a >> log_$$x; \
          終わり; \
     終わり

この make ファイルを実行すると、log_y と log_z の 2 つのファイルが作成されました。log_y にはデータ「yb」と「yc」があります。同様に、log_z にはデータ "zb" と "zc" があります。

実際には、4 つのファイル (log_y_b、log_y_c、log_z_b、log_z_c) を作成したいと考えています。このために、上記のメイクファイルを次のように変更しました。

全て:
     @ for x in yz; \
     行う \
          bc の a の場合。\
          行う \
                   echo $$x$$a >> log_$$x_$$a; \
          終わり; \
     終わり

しかし、log_. 4 つのファイルを作成するにはどうすればよいですか。

4

2 に答える 2

4

おそらく、変数名を中かっこで囲みます。これは私のシステムで機能します。

all:
    @for x in y z; \
    do \
        for a in b c; \
        do \
            echo $$x$$a >> log_$${x}_$${a}; \
        done; \
    done

foreachを使用することもできます:

all:
    @$(foreach x,y z,$(foreach a,b c,echo $(x)$(a) >> log_$(x)_$(a);))
于 2011-02-01T17:10:36.247 に答える
1

log_$$x_$$aMakefileのは、log_$x_$aと同等のシェルになりますlog_${x_}${a}。ただし、変数$x_は未定義であるため、シェルは変数を空の文字列に置き換えます。

$x解決策:名前()を中かっこで囲んで変数を適切に記述します${variablename}。つまり、一貫性を保つためにlog_${x}_${a}(またはMakefileスタイル:)を記述しlog_$${x}_$${a}ます。

于 2011-02-01T17:08:43.290 に答える