最近在看 Altera SOC 的开发,感觉相比于xilinx, altera不管是在开发环境还是整个SOC的结构上都要差一些, ok ,不喷,谁让老板这里只有altera 呢,开正题。---------------我是分割线-------------------------------------------------
Makefile 有三个很有意思的变量 $@ $^ $<
再说这个三个变量的意思之前,我们先来看两个Makefile
main:main.o mytool1.o mytool2.o ||main:main.o mytool1.o mytool2.o
gcc -o $@ $^ ||gcc -o main main.o mytool1.o mytool2.o
main.o:main.c mytool1.h mytool2.h ||main.o:main.c mytool1.h mytool2.h
gcc -c $< ||gcc -c main.c
mytool1.o:mytool1.c mytool1.h ||mytool1.o:mytool1.c mytool1.h
gcc -c $< ||gcc -c mytool1.c
mytool2.o:mytool2.c mytool2.h ||mytool2.o:mytool2.c mytool2.h
gcc -c $< ||gcc -c mytool2.c
在Makefile中最重要的是文件的依赖关系和规则。
比如下列两行代码main:main.o mytool1.o mytool2.o
gcc -o main main.o mytool1.o mytool2.o
其中第一行是依赖关系,第二行描述为规则。其中规则的一般格式为
TARGET:COMPONENT 可以理解为要生成target ,需要按照规则将componet进行操作。也就是说 target 的生成依赖于component。在上面两行中也就是mian 的生成要依赖于 mian.o mytool1.o mytool2.o,但在生成过程中的规则则需要按照第二行的过程来做。
解释清这个基本的代码我们再来看进阶版的代码
main:main.o mytool1.o mytool2.o
gcc -o $@ $^
在这其中,$@代表着TARGET位置的变量,在上面中就是mian.
$^代表着所有component文件,是所有,而$<则仅代第一个component文件。
说到这里我想大家应该清楚了,然后我们再来最终版
mytool1.o:mytool1.c mytool1.h %.o:%.c
gcc -c $< gcc -c $<
在第一行中,%.o代表着所有.o 文件,%.c则代表着所有.c文件,%.o:%.c 的意思则是所有的.o文件的生成依赖着所有.c文件。
ok
完了。
由于本人水平有限,本日志更多的是作为本人学习进程的记录,大家凑活着看哈,有问题随时指教。