在进行程序编写时,很多不同功能的模块编译有着前后顺序,动辄改动中间一个就需要编译剩余部分,而手动一个个编译非常耗时耗力,所以makefile时一个很好的解决办法
问题起因:
在进行基于lubuntu的简单操作系统编写时,bochs命令需要master.img,而master.img的构建需要boot.bin,boot.bin则是由汇编boot.asm翻译过来二进制文件,而修改boot.asm就需要重新翻译成boot.bin,boot.bin改变之后就需要重新构建master.img,进而影响bochs的执行,所以想到了makefile
开始:
首先先摆上例子,以例子展开讲解:
在当前目录新建文件命名为makefile
bochs: master.img
bochs
master.img: boot.bin
[ -f master.img ] || bximage -q -hd=16 -mode=create -sectsize=512 -imgmode=flat master.img
dd if=boot.bin of=master.img bs=512 count=1 conv=notrunc
boot.bin: boot.asm
nasm -f bin boot.asm -o boot.bin
clean:
rm -rf boot.bin master.img
橙色为要生成的文件,红色为生成此文件的前提,绿色是为了生成文件时会执行的语句
例如在命令行中输入make boot.bin,则会执行语句:nasm -f bin boot.asm -o boot.bin
在此次操作中,要想执行make boot.bin,当前目录中必须有boot.asm,且没有boot.bin(或者boot.asm的修改时间比已经有的boot.bin要新)则执行:boot.bin的生成语句
clean一般用于清除所有的已生成文件
如有错误,敬请指出