【0】README

  • makefile定义: 一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要一先编译,哪些文件需要后编译,哪些文件需要重新编译;

【1】看个荔枝

荔枝解析-Analysis:

loader.bin : loader.asm include/load.inc include/fat12hdr.inc include/pm.inc $(ASM) $(ASMFLAGS) -o $@ $<
  • A1)比如以上这个makefile的最后两行,翻译出来就是:

    • 1)要想得到loader.bin ,需要执行 $(ASM) $(ASMFLAGS) -o $@ $< ;
    • 2) loader.bin 依赖于 以下文件:loader.asm、 include/load.inc 、include/fat12hdr.inc 、include/pm.inc ;
    • 3)当以上依赖文件 有一个比 loader.bin 新时,command 才被执行;
  • A2)那么 $(ASM) $(ASMFLAGS) -o $@ $< 又表示什么呢?

    $@ 代表 target  == loader.bin;
    $< 代表 prerequisites 的第一个名字  == loader.asm;
    所以,这行就等价于 nasm -o loader.bin loader.asm ;
    
  • A3)后面有冒号的还有:

    # All Phony Targets
    .PHONY : everything clean all
    # Default starting position
    everything : $(TARGET)
    clean :  rm -f $(TARGET)
    all : clean everything
    

    everything + clean + all 叫做动作名称而已;
    如果运行 make clean, 将会执行 rm -f ${TARGET} == rm -f boot.bin loader.bin

  • A4)make everything == make
    因为 直接输入 make的话,这是 make程序 会从第一个名字所代表的动作开始执行, 而第一个动作名称是everything;

  • A5) make 指令, 默认的makefile文件是 Makefile,而如果要指定特定的makefile, 加上-f 参数;如make all -f Makefile.boot ;
  • A6) 对头文件目录的指定 -I include ;
  • A7)当要确定文件的依赖关系时,利用 GCC 提供的参数 -M 可以自动生成依赖关系, 然后将依赖关系copy 到 makefile中就可以了;
  • A8)查找依赖关系 gcc 和 nasm 都是用 参数 -M;

【2】我的 Makefile

  • 2.1)荔枝一,我们只编译boot 文件


  • 2.2)荔枝二,编译boot+loader文件,并将loader拷贝到系统软盘

    ASM             = nasm
    BOOT_T          = boot.bin
    IMAGE_T         = a.img
    LOADER_T        = loader.bin
    .PHONY: image clean build_img
    image : ${BOOT_T} ${LOADER_T} build_img
    clean :rm -f $(LOADER_T) ${BOOT_T}
    # loader : ${LOADER_
    #  boot :       $(BOOT_T)
    build_img:dd if=boot.bin of=a.img bs=512 count=1 conv=notruncsudo mount -o loop a.img /mnt/floppy/sudo cp -f loader.bin /mnt/floppy/sudo umount /mnt/floppy/
    boot.bin : boot.asm$(ASM) -o $@ $<
    loader.bin: loader.asm$(ASM) -o $@ $<
    

  • 2.3)荔枝三,编译boot+loader文件,并将loader拷贝到系统软盘 (注意,这里加入了文件依赖)



    ASM             = nasm2 ASMDIR          = boot/include/34 BOOT_T          = boot/boot.bin56 IMAGE_T         = a.img78 LOADER_T        = boot/loader.bin910 .PHONY: image clean build_img1112 image : ${BOOT_T} ${LOADER_T} build_img1314 clean :15         rm -f $(LOADER_T) ${BOOT_T}1617 # loader : ${LOADER_18 #  boot :       $(BOOT_T)1920 build_img:21         dd if=boot/boot.bin of=a.img bs=512 count=1 conv=notrunc22         sudo mount -o loop a.img /mnt/floppy/23         sudo cp -f boot/loader.bin /mnt/floppy/24         sudo umount /mnt/floppy/2526 boot/boot.bin : boot/boot.asm ${ASMDIR}load.inc ${ASMDIR}fat12hdr.inc27         $(ASM) -I ${ASMDIR}  -o $@ $<28 boot/loader.bin: boot/loader.asm ${ASMDIR}fat12hdr.inc ${ASMDIR}load.inc ${ASMDIR}pm.inc29         $(ASM) -I${ASMDIR} -o $@ $<
    

  • 2.4)荔枝四,编译boot+loader文件,并将loader和os kernel 拷贝到系统软盘
    Alert):本Makefile文件很有代表性,参见https://github.com/pacosonTang/Orange-s-OS/blob/master/Makefile

    ASM  = nasmASMDIR   = boot/include/GCC  = gccLD   = ldBOOT_T   = boot/boot.binIMAGE_T = a.imgLOADER_T = boot/loader.binKERNEL_T    = kernel/kernel.o kernel/start.oLIB_T    = lib/kliba.o lib/string.oFINAL_T  = kernel/kernel.bin.PHONY: image clean build_imgimage : ${BOOT_T} ${LOADER_T} ${KERNEL_T} ${LIB_T} ${FINAL_T} build_imgclean :rm -f $(LOADER_T) ${BOOT_T} ${KERNEL_T} ${LIB_T} ${FINAL_T}# loader : ${LOADER_# boot :    $(BOOT_T)build_img:dd if=boot/boot.bin of=a.img bs=512 count=1 conv=notruncsudo mount -o loop a.img /mnt/floppy/sudo cp -f boot/loader.bin /mnt/floppy/sudo cp -f kernel/kernel.bin /mnt/floppy/sudo umount /mnt/floppy/boot/boot.bin : boot/boot.asm ${ASMDIR}load.inc ${ASMDIR}fat12hdr.inc$(ASM) -I ${ASMDIR} -o $@ $<boot/loader.bin: boot/loader.asm ${ASMDIR}fat12hdr.inc ${ASMDIR}load.inc ${ASMDIR}pm.inc$(ASM) -I ${ASMDIR} -o $@ $<kernel/kernel.o: kernel/kernel.asm$(ASM) -f elf -o $@ $<kernel/start.o: kernel/start.c include/type.h include/const.h include/protect.h$(GCC) -I include/ -c -fno-builtin -o $@ $<lib/kliba.o: lib/kliba.asm$(ASM) -f elf -o $@ $<lib/string.o: lib/string.asm$(ASM) -f elf -o $@ $<kernel/kernel.bin: ${KERNEL_T}${LD} -s -Ttext 0x30400 -o $@ ${KERNEL_T} ${LIB_T}
    

Makefile浅尝相关推荐

  1. 浅尝key-value数据库(三)——MongoDB的分布式

    浅尝key-value数据库(三)--MongoDB的分布式 测试了单机MongoDB的随机读和写入性能,这一节来讲一讲MongoDB的分布式. MongoDB的分布式分成两种,一种是Replicat ...

  2. 论文浅尝 | 利用多语言 wordnet 上随机游走实现双语 embeddings

    论文笔记整理:谭亦鸣,东南大学博士生,研究方向为知识图谱问答. 来源:Knowledge Based System 链接:https://www.sciencedirect.com/science/a ...

  3. 论文浅尝 | 图神经网络综述:方法及应用

    论文链接:https://arxiv.org/pdf/1812.08434.pdf GNN相关论文列表链接:https://github.com/thunlp/GNNPapers 近日,清华刘知远老师 ...

  4. 论文浅尝 | 当知识图谱遇上零样本学习——零样本学习综述

    随着监督学习在机器学习领域取得的巨大发展,如何减少人工在样本方面的处理工作,以及如何使模型快速适应层出不穷的新样本,成为亟待解决的问题.零样本学习(Zero-Shot Learning, ZSL)的提 ...

  5. 论文浅尝 | 近期论文精选

    本文转载自公众号 PaperWeekly, 对我们近期的论文浅尝进行了精选整理并附上了相应的源码链接,感谢 PaperWeekly! TheWebConf 2018 ■ 链接 | https://ww ...

  6. 论文浅尝 | 从 6 篇顶会论文看「知识图谱」领域最新研究进展 | 解读 代码

    本文内容源自往期「论文浅尝」,由 PaperWeekly 精选并重新排版整理,感谢 PaperWeekly. ISWC 2018 ■ 链接 | http://www.paperweekly.site/ ...

  7. 通过集成腾讯 IM 来浅尝一下.net 6 的 MINI API

    背景 下一篇在继续 Go 的学习笔记,因为这阵子一直有项目压着,确实没有精力去总结学习成果.所以这篇就先换换口味,切回老本行,分享一下.net 6 的一个小知识. 前些天,我们对外提供的一些管理系统, ...

  8. 浅尝Pytorch自动混合精度AMP

    AMP目录 浅尝Pytorch自动混合精度 从浮点数说起 深度学习中的浮点数 例1-上溢 例2-下溢 解决了什么问题? Pytorch相关功能简述 Autocasting Autocasting作上下 ...

  9. bo耳机h5使用说明_给想浅尝便携hifi耳机的烧友的一点建议

    初入门的烧友,要么是好友推荐品牌或型号,要么是机缘巧合蹭听到了好耳机的声音,心潮澎湃,仿佛一下打开了新世界的大门!原来听的歌,现在听感觉完全不同,有种豁然开朗的感觉,之后,心如小鹿乱撞,恨不得马上买买 ...

最新文章

  1. 深度学习(4)基础4 -- 神经网络架构激活函数过拟合处理
  2. android中PreferencesActivity的使用(一)
  3. torch.unbind()
  4. 二进制与格雷码之间的转换的Verilog实现(更多一点的讨论)
  5. vue 02-上计算属性、样式的操作,指令(含自定义,全局和局部)
  6. Wireshark网络分析实例集锦(大学霸内部资料)
  7. win10专业版关闭smartscreen
  8. (待定系数法)A/B
  9. 《FusionCharts学习及使用笔记》之 第一篇
  10. 1分钟理解pytorch的reshape函数中-1表示的意义
  11. 已解决:手动打包war包结果无法在Tomcat中部署
  12. python函数和代码复用思维导图_Python语言程序---代码复用与函数递归(二)
  13. WordPress简约昼夜切换导航NDNAV主题模板
  14. Allegro cadence下载安装
  15. 服务器lsass系统错误,lsass.exe系统错误解决教程
  16. 固体物理 2022.9.27
  17. 文件夹重命名失败,删除失败,提示‘文件正在被使用‘
  18. 装机不求人,10 分钟完成电脑配置挑选
  19. iOS 实现二维码的彩色效果
  20. 中医证型关联规则挖掘Python代码【完整】

热门文章

  1. CF1237F Balanced Domino Placements(组合计数,dp)
  2. [构造训练]CF1227G Not Same,CF1375H Set Merging,CF1364E X-OR
  3. 数论分块练习([CF830 C]Bamboo Partition + [hdu 6395]Sequence )
  4. 模板:LGV引理(线性代数)
  5. P4630-[APIO2018]Duathlon铁人两项【圆方树】
  6. jzoj3086,luogu3831-[SHOI2012]回家的路【最短路,拆点】
  7. P1455-搭配购买【图论,并查集,dp,背包】
  8. 【模板】Manacher算法
  9. 【贪心】最大连续数列的和
  10. [XSY3382] 专家系统(二分+线段树)