makefile在练习的时候,“编辑”是用linux下的vi/vim吗??
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了makefile在练习的时候,“编辑”是用linux下的vi/vim吗??相关的知识,希望对你有一定的参考价值。
makefile就是文本文件,在linux下字符模式一般使用vi或vim。图形模式下选择就多了只要文件编辑器就行。 参考技术A linux 下的文件 基本上都能用vi、vim 打开 和编辑的 参考技术B makefile 可以使用任何一种文本编辑器打开。 参考技术C 用哪个编辑器无所谓,vi或者emacs都可以,如果真的不会用这两个,nano或者gedit什么的也可以考虑。还是建议学会使用vi或者emacs。 参考技术D 若您使用的文本界面,即命令行界面的话,vi/vim是系统默认的编辑器。一般系统已经默认安装了vi/vim编辑器。其中vim功能比较完善,相对于vi来说。若您的系统比较新的话,默认安装的是vim。
Linux下的Makefile初入
在Windows下的开发环境中用集成的IDE编辑器的话,会经历编写、编译、下载/执行,而在Linux下没有这些,这就需要我们自己来进行创造。
Makefile的作用就是对代码进行编译,我们在进行一个已经写好的代码进行编译的时候回执行如下指令
1 gcc a.c -o a.out
这样做的话一个文件少没问题,而一旦文件多达上百个的时候,我们不可能还要一个一个的敲,这时候就需要使用Makefile
NAME := led #工程名字 OBJ := a.o b.o start.o #链接文件名 ARM := arm-linux-gnueabihf- #编译语句 GCC := $(ARM)gcc #编译文件 LD := $(ARM)ld #链接文件 OBJCOPY := $(ARM)objcopy #编译为bin文件 OBJDUMP := $(ARM)objdump #反编译为汇编文件 $(NAME).bin:&(OBJ) $(LD) -Ttest 0x87800000 $^ -o $(NAME).lef $(OBJCOPY) -O binary -S $(NAME).lef $@ $(OBJDUMP) -D -m arm $(NAME).lef > $(NAME).dis %.o:%.s $(GCC) -Wall -nostdlib -c -O2 -o $@ $< %.o:%.S $(GCC) -Wall -nostdlib -c -O2 -o $@ $< %.o:%.c $(GCC) -Wall -nostdlib -c -O2 -o $@ $< clean: rm -rf *.0 *.lef *dis
在makefile中,可以像C语言中定义变量 NAME、OBJ、ARM、GCC、LD、OBJCOPY、OBJDUMP 就为变量 而$( NAME)则使用变量 如
ARM := arm-linux-gnueabihf- #编译语句 GCC := $(ARM)gcc #编译文件 #等效于 arm-linux-gnueabihf-gcc
%.c %.o %.s 为通配符,表示文件下所有.c .o .s文件
%.o:%.c 等效于 a.o:a.c,表示.o文件依赖于.c文件,原理是如果.c文件的时间比.o文件的时间新,则执行
a.o:a.c
$(GCC) -Wall -nostdlib -c -O2 -o $@ $< 等效于
arm-linux-gnueabihf-gcc -Wall -nostdlib -c -O2 -o a.o a.c
链接所有.o文件 0x87800000为代码起始地址
$(LD) -Ttest 0x87800000 $^ -o $(NAME).lef
等效于
arm-linux-gnueabihf-ld -Ttest 0x87800000 a.o -o a.lef
把.lef文件编译为bin文件
$(OBJCOPY) -O binary -S $(NAME).lef $@
等效于
arm-linux-gnueabihf-objcopy -O binary -S a.lef a.bin
反汇编,把bin文件编译为.dis 汇编文件
$(OBJDUMP) -D -m arm $(NAME).lef > $(NAME).dis
等效于
arm-linux-gnueabihf-objump -D -m arm a.lef > a.dis
根据我自己所理解的程度编译的,可能不详细,见谅
以上是关于makefile在练习的时候,“编辑”是用linux下的vi/vim吗??的主要内容,如果未能解决你的问题,请参考以下文章