DiskSim 4源码 - D1 - Makefile

  • 如果本文有任何错误之处,或您有任何建议或意见,万望不吝赐教,大家一起进步! :)

刚才忘了写一下需求了,目前的需求有:
1. 使用ssd扩展
2. 使用自定义的输入trace格式(其中一个字段包括IO内容的4k-md5值)
3. 重删/非重删模式下对性能的Impact:
i. 读写次数统计
ii. 擦除次数统计
iii. 响应时间
4. 读写流程。

D1:理解一下工程的Makefile

D1的任务就是理解下面这个Makefile,首先是一些琐碎的Makefile语法:
实际上,Makefile由一系列类似下面的组成

<target> : <prerequisites> 
[tab]  <command1>
[tab]  <command2>
...
  • include <filename>

make 程序在处理指示符 include 时,将暂停对当前makefile 文件
的读取,而去读<filename>指示的文件(列表)。
<filename>将通过某种方式搜索得到。

  • $(shell xxx)

$(shell ...)将包含一条shell 命令,如下面所示的pwd
Makefile中的shell,每一行是一个进程,不同行之间变量值不能传递。
Makefile中的变量以$开头, 所以,为了避免和shell的变量冲突,shell的变量以$$开头

  • export var_name

这是用于在不同的makefile中共享变量的。

  • $(MAKE) -C <dir_name>

区别于gcc -c xxx.c,gcc的-c选项用于“把代码文件编译成中间代码.o文件”;
而make的-C选项是“切换到dir所在目录,然后执行make,之后再切换回原目录”

  • $@

其中一个自动变量,代表目前正在构建的目标。
其他的自动变量(如$<等)在阮一峰的教程中详细说明。

  • .PHONY: xxx(伪目标)

特殊声明,每次make xxx时都执行(而不去检查是否该目标为更新的)

//这是<disksim_dir>/makefile文件
TOP_BUILDDIR=$(shell pwd)
include .paths
SUBDIRS=libddbg libparam diskmodel memsmodel ssdmodel src

all:    
    $(MAKE) -C libddbg
    $(MAKE) -C libparam
    $(MAKE) -C diskmodel
    $(MAKE) -C memsmodel
    $(MAKE) -C ssdmodel
    $(MAKE) -C src
    $(MAKE) -C diskmodel/layout_g4_tools
        # If dixtrac is included, build it with the distribution
    if [ -d dixtrac ]; then $(MAKE) -C dixtrac ; fi

clean:
    for d in $(SUBDIRS); do \
        $(MAKE) -C $$d $@; \
    done

distclean: clean
    rm -f *~
    for d in $(SUBDIRS); do \
        $(MAKE) -C $$d $@; \
    done

.PHONY: doc
doc:
    $(MAKE) -C libddbg
    $(MAKE) -C libparam
    $(MAKE) -C src/modules
    $(MAKE) -C diskmodel/modules
    $(MAKE) -C memsmodel/modules
    $(MAKE) -C ssdmodel/modules

doc-clean:
    $(MAKE) -C memsmodel/modules distclean
    $(MAKE) -C diskmodel/modules distclean
    $(MAKE) -C ssdmodel/modules distclean
    $(MAKE) -C src/modules distclean
    $(MAKE) -C libparam distclean
    $(MAKE) -C libddbg distclean
//这是\<disksim dir>\.paths文件
# libdisksim
export LIBDISKSIM_PREFIX=
export LIBDISKSIM_INCL=$(LIBDISKSIM_PREFIX)/include
export LIBDISKSIM_CFLAGS=-I$(LIBDISKSIM_INCL)
export LIBDISKSIM_LDPATH=$(LIBDISKSIM_PREFIX)/lib
export LIBDISKSIM_LDFLAGS=-L$(LIBDISKSIM_LDPATH) -ldisksim

# disksim internals (for memsmodel, etc)
export DISKSIM_PREFIX=src/
export DISKSIM_INCL=$(DISKSIM_PREFIX)/
export DISKSIM_CFLAGS=-I$(DISKSIM_INCL)
export DISKSIM_LDPATH=$(DISKSIM_PREFIX)/
export DISKSIM_LDFLAGS=-L$(DISKSIM_LDPATH) -ldisksim

# path to diskmodel
export DISKMODEL_PREFIX=diskmodel
export DISKMODEL_INCL=$(DISKMODEL_PREFIX)/include
export DISKMODEL_CFLAGS=-I$(DISKMODEL_INCL)
export DISKMODEL_LDPATH=$(DISKMODEL_PREFIX)/lib
export DISKMODEL_LDFLAGS=-L$(DISKMODEL_LDPATH) -ldiskmodel

# path to libparam
export LIBPARAM_PREFIX=libparam
export LIBPARAM_INCL=$(LIBPARAM_PREFIX)/include
export LIBPARAM_CFLAGS=-I$(LIBPARAM_INCL)
export LIBPARAM_LDPATH=$(LIBPARAM_PREFIX)/lib
export LIBPARAM_LDFLAGS=-L$(LIBPARAM_LDPATH) -lparam

# libtrace
export LIBDDBG_PREFIX=libddbg
export LIBDDBG_INCL=$(LIBDDBG_PREFIX)/include
export LIBDDBG_CFLAGS=-I$(LIBDDBG_INCL)
export LIBDDBG_LDPATH=$(LIBDDBG_PREFIX)/lib
export LIBDDBG_LDFLAGS=-L$(LIBDDBG_LDPATH) -lddbg

# path to memsmodel
export MEMSMODEL_PREFIX=memsmodel
export MEMSMODEL_INCL=$(MEMSMODEL_PREFIX)/include
export MEMSMODEL_CFLAGS=-I$(MEMSMODEL_INCL)
export MEMSMODEL_LDPATH=$(MEMSMODEL_PREFIX)/lib
export MEMSMODEL_LDFLAGS=-L$(MEMSMODEL_LDPATH) -lmemsmodel

# path to ssdmodel
export SSDMODEL_PREFIX=ssdmodel
export SSDMODEL_INCL=$(SSDMODEL_PREFIX)/include
export SSDMODEL_CFLAGS=-I$(SSDMODEL_INCL)
export SSDMODEL_LDPATH=$(SSDMODEL_PREFIX)/lib
export SSDMODEL_LDFLAGS=-L$(SSDMODEL_LDPATH) -lssdmodel

有了上面的知识,该Makefile简直简单,就是一个“总控Makefile”,它做了:

  1. include了一个文件.paths,export了一堆变量以供下一级的Makefile使用;
  2. 定义了几个目标,他们需要分别进入每个子目录进行make。

显然disksim整个工程中的所有东西不需要每个都去看,比较相关的有:<u>trace文件读入,请求的生成,ssd模块(MS版)的处理</u>等。

参考文献:
<a href=http://www.blogjava.net/jasmine214--love/archive/2012/01/10/368191.html>makefile中的shell语法</a>
<a href=http://blog.sina.com.cn/s/blog_6cc850810100r8fr.html>Makefile Include</a>
<a href=http://blog.csdn.net/shallnet/article/details/37358169>从头开始写makefile系列</a>
<a href=http://bbs.chinaunix.net/forum-viewthread-tid-1630480.html>ChinaUNiXmake的C选项问题讨论<a>
<a href=http://www.ruanyifeng.com/blog/2015/02/make.html>阮一峰的make教程</a>
<a href=https://gist.github.com/isaacs/62a2d1825d04437c6f08>issacs的make basic教程</a>
<a href=http://www.gnu.org/software/make/manual/make.html>GNU make官方文档<a>
<a href=http://www.cnblogs.com/hnrainll/archive/2011/04/12/2013377.html>Disksim的特殊规则.PHONY</a>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容