pintos项目的makefile解析(一)

pintos项目是在大二下的时候学习操作系统时的实验课项目,由于当时学业压力大,根本没时间去仔细地了解Linux。

因此在这个时候重新来学习,先从这个makefile来学习,因为Makefile是linux下大型项目的一个编译工具,希望自己具备这样的能力。

那么先回忆一下,在Pintos的测试中是进入路径   

 pintos/src/threads/build

下输入make 命令,然后再输入  make check 命令来测试,输入 make clean  来清空之前编译的结果的。

那么这个目录下的Makefile应该是一个总的Makefile了,看看这个Makefile里面的内容,一点一点来解析吧!

# -*- makefile -*-


SRCDIR = ../..
#所有存放源文件的目录,也就是  pintos/src/
all: kernel.bin loader.bin
#这个all是标签,Makefile中的第一个目标会被作为其默认目标,由于伪目标的特性是,总是被执行的,
#所以其依赖的 kernel.bin loader.bin 就总是不如“all”这个目标新。所以,这2个二进制文件总会更新
include ../../Make.config
include ../Make.vars
include ../../tests/Make.tests
这个是Makefile的前面几行,all是个标签,输入命令 make all 的话就会运行  kernel.bin loader.bin 这2个程序

然后看到  include 了一个文件,去看看 pintos/src/Make.config

那么对3个这Makefile的文件的解析我都写在这里了:

首先是../../Make.config:

# -*- makefile -*-

SHELL = /bin/sh
#指定使用的shell
VPATH = $(SRCDIR)
#特殊变量 VPATH 指定文件的查找路径
# Binary utilities.
# If the host appears to be x86, use the normal tools.
# If it's x86-64, use the compiler and linker in 32-bit mode.
# Otherwise assume cross-tools are installed as i386-elf-*.
X86 = i.86\|pentium.*\|[pk][56]\|nexgen\|viac3\|6x86\|athlon.*\|i86pc  
# .*是模糊匹配,\|是管道的转义
X86_64 = x86_64

# Pintos doesn't compile/run properly using gcc 4.3+. Force 4.1 for now.
# 这句话的意思大概是 必须是4.1版本的gcc 才可以正常编译
CCPROG = /usr/class/cs140/x86_64/bin/i586-elf-gcc
ifeq ($(strip $(shell command -v $(CCPROG) 2> /dev/null)),)
#strip函数:功能:去掉<string>字串中开头和结尾的空字符。返回被去掉空格的字符串值。
#如果strip这个函数返回为空的话
#strip是函数名,  函数参数是  $(shell command -v $(CCPROG) 2> /dev/null)  ,单独的一个变量
#参考博客: http://www.cnblogs.com/bethal/p/5430229.html
# 这个函数会新生成一个Shell程序来执行命令
  CCPROG = gcc
endif

ifneq (0, $(shell expr `uname -m` : '$(X86)'))
  CC = $(CCPROG)
  LD = ld
  OBJCOPY = objcopy
else
  ifneq (0, $(shell expr `uname -m` : '$(X86_64)'))
    CC = $(CCPROG) -m32
    LD = ld -melf_i386
    OBJCOPY = objcopy
  else
    CC = i386-elf-gcc
    LD = i386-elf-ld
    OBJCOPY = i386-elf-objcopy
  endif
endif

ifeq ($(strip $(shell command -v $(CC) 2> /dev/null)),)
$(warning *** Compiler ($(CC)) not found.  Did you set $$PATH properly?  Please refer to the Getting Started section in the documentation for details. ***)
en
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值