私は次の構造を持っています
home
|-- Makefile
|-- H1
| |-- Makefile
| `-- h1.c
|-- H2
| |-- Makefile
| `-- h2.c
|-- main.c
H1/メイクファイル
h1.o:h1.c
gcc -c h1.c
H2/メイクファイル
h2.o:h2.c
gcc -c h2.c
ホーム/メイクファイル
DIR = h1 h2
main.out:main.o
for i in $(DIR);\
do (cd $$i; make);\ //1.why () used here to encolose 2 commands and $$ before the i
done
gcc -o main.out main.o ./h1/h1.o ./h1/h1.o
main.o:main.c
gcc -c main.c
上記は正常に機能し、出力ファイルを提供しますが、これがこのコンパイルを行う効率的な方法であるか、またはこれを行う他の方法であるかは疑問です。
私の質問はコードのコメントに記載されており、以下にも続きます
I have tried like
do(cd $i;make;)//this showing error
also do(cd $$i;)make;//this also sowing error
、親切にアイデアを教えてください。ここで何が起こっているのですか。私はいくつかの本を調べましたが、$$ は現在のプロセス Id を意味することがわかりましたが、ここで i の前にこれを使用することは何ですか。
()
また、2 つのコマンド [cd
とmake
]を囲むために ,を使用する意味は何ですか。
私の疑問に答えてください。