我有以下结构
home
|-- Makefile
|-- H1
| |-- Makefile
| `-- h1.c
|-- H2
| |-- Makefile
| `-- h2.c
|-- main.c
H1/生成文件
h1.o:h1.c
gcc -c h1.c
H2/Makefile
h2.o:h2.c
gcc -c h2.c
主页/Makefile
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 之前这里有什么用。
还有什么是使用()
, 来包含两个命令 [cd
和make
]。
请给我一些答案以解决我的疑问。