0

次のgnu makeスクリプトがあります:

for hdrfile in $(_PUBLIC_HEADERS) ; do \
    echo $(dir $$hdrfile) ; \
done

変数には、次の_PUBLIC_HEADERSような相対パスのリストがあります。

./subdir/myheader1.h
./subdir/myheader2.h

上記の for ループから得られる出力は次のとおりです。

./
./

私は見ることを期待しています:

./subdir/
./subdir/

私は何を間違っていますか?コードを次のように変更すると、次のようになることに注意してください。

echo $(dir ./subdir/myheader1.h)

この場合は機能します。おそらく for ループと関係があると思いますが、よくわかりません。

4

1 に答える 1

0

make-loopを実行するときに、変数 (または関数) をシェル変数と混同していますfor。コマンドがシェルによって実行される前にによって展開される構造であることに$(dir ...)注意してください。ただし、シェルでそのコマンドをループ内で実行する必要があります。makemake

できることは、シェルによって実行される$(dir)対応するコマンドに置き換えることです。dirnameしたがって、次のようになります。

for hdrfile in $(_PUBLIC_HEADERS) ; do \
    dirname $$hdrfile ; \
done

これにより、望ましい結果が得られるはずです。

于 2012-06-20T02:57:06.203 に答える