guanjt的个人空间 https://blog.eetop.cn/1228512 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

Makefile 的三个一颗赛艇的变量$@,$^,$<

已有 558 次阅读| 2016-9-5 16:58

最近在看 Altera SOC 的开发,感觉相比于xilinx, altera不管是在开发环境还是整个SOC的结构上都要差一些, ok ,不喷,谁让老板这里只有altera 呢,开正题。
---------------我是分割线-------------------------------------------------
Makefile 有三个很有意思的变量 $@   $^  $<
再说这个三个变量的意思之前,我们先来看两个Makefile
main:main.o mytool1.o mytool2.o       ||mainmain.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.omain.c mytool1.h mytool2.h 
gcc -c $<                                                ||
gcc -c main.c 
mytool1.o:mytool1.c mytool1.h           ||
mytool1.omytool1.c mytool1.h 
gcc -c $<                                               ||
gcc -c mytool1.c 
mytool2.o:mytool2.c mytool2.h          ||
mytool2.omytool2.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
完了。
由于本人水平有限,本日志更多的是作为本人学习进程的记录,大家凑活着看哈,有问题随时指教。


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 0

    获赞
  • 0

    评论
  • 182

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-11 12:08 , Processed in 0.014372 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部