Linux学习——Makefile工程管理

使用Gnu make工具来管理程序是每个Linux工程师必须掌握的技能。Make能够是整个程序的编译、链接只需要一个命令(make)就可以完成。Make的工作主要依赖一个称为Makefile的文件。文件描述了整个程序的编译,链接等规则。包括:工程中哪些源文件需要编译以及如何编译,如何最后产生我们想要的可执行文件。

makefile主要由规则和变量两部分构成。

规则:

一般规则如下:

targets : prerequisites

command

目标:依赖

命令

备注:命令需要使用【TAB】键空格

例如:

hello:hello.c

gcc hello.c -o hello

其中Makefile把那些只包含命令,没有任何依赖的目标称为伪目标(phony targets)。

.PHONY :clean

clean:

rm -f hello

注:".PHONY"将clean目标声明为伪目标。

如果用户没有定执行某一条规则,make会默认执行makefile中的第1条规则,而这条规则中的目标称之为:最终目标。

例如:

hello:hello.c

gcc hello.c -o hello

clean:

rm -f hello

如果只执行make,默认执行第一条规则。如果执行make clean则执行第二条clean规则。当然也可以这样子执行:make clean hello.执行顺序是clean规则,hello规则。

通用规则:

如果makefile中有许多类似的规则时,可以将这些规则合并为一条通用规则。

例如:

all:led.bin

led.bin: led.o

arm-linux-ld -Tled.lds -o led.elf led.o

arm-linux-objcopy -O binary led.elf led.bin

led.o : led.S

arm-linux-gcc -g -o [email protected] -c $^

main.o : main.S

arm-linux-gcc -g -o [email protected] -c $^

func.o : func.S

arm-linux-gcc -g -o [email protected] -c $^

合并后:

all:led.bin

led.bin: led.o

arm-linux-ld -Tled.lds -o led.elf led.o

arm-linux-objcopy -O binary led.elf led.bin

%.o : %.S

arm-linux-gcc -g -o [email protected] -c $^

变量:

例如:

obj = hello.c

hello:${obj}

gcc ${obj} -o hello

在makefile中除了用户可以自定义变量外,还可以使用系统已经定义好的默认变量。

如:

$^:代表所有依赖文件

[email protected]:代表目标

$<:代表第一个依赖文件

例如:

使用前:

led.o : led.S

arm-linux-gcc -g –o led.o -c led.S

使用后:

led.o : led.S

arm-linux-gcc -g –o [email protected] -c $^

附加说明:

Makefile中“#”字符后的内容被视作注释。

hello: hello.c

@gcc hello.c –o hello

@:可以取消回显

那么什么是回显呢?演示一下:

makefile内容(未去回显):

hello:hello.c

gcc hello.c -o hello

clean:

rm -f hello

运行如下:

运行过程中出现的命令行即为回显。

makefile内容(去回显):

hello:hello.c

@gcc hello.c -o hello

clean:

rm -f hello

运行如下:

时间: 2024-08-28 20:29:33

Linux学习——Makefile工程管理的相关文章

3.Makefile工程管理

3.Makefile工程管理 一.体验 在前面的笔记里可以看到,要编译一个简单的工程需要的编译步骤是很多的.前面还是只有一个汇编文件,在一个工程里,会有很多文件的,如果像前面的那种编译方式是很不可靠的.这就需要Makefile工程管理. 例如前面的那个led.S,要编译成led.bin的步骤:图1-1: arm-linux-gcc -g -c led.S arm-linux-ld -Tled.lds -o led.elf led.o arm-linux-objcopy -O binary led

Linux学习之用户管理命令与用户组管理命令(十五)

Linux学习之用户管理命令与用户组管理命令 目录 用户管理命令 用户添加命令useradd 修改用户密码passwd 修改用户信息usermod 修改用户密码状态chage 删除用户userdel 用户切换命令su 用户组管理命令 添加用户组 修改用户组 删除用户组 将用户添加到组或者从组中删除 用户管理命令 用户添加命令useradd 只能超级用户才能添加用户. useradd [选项] 用户名 选项: -u UID:手工指定用户的UID号 -d 家目录:手工指定用户的家目录 -c 用户说明

Linux学习之进程管理(十九)

Linux学习之进程管理 进程查看 查看系统中所有进程,使用BSD操作系统的格式 语法:ps aux 选项: a:显示所有前台进程 x:显示所有后台进程 u:显示这个进程是由哪个用户产生的 语法:ps -le 查看系统中所有进程,使用Linux标准命令格式 选项 l:显示详细信息 e:显示所有进程 USER:该进程是由哪个用户产生的 PID:进程的ID号 %CPU:该进程占用CPU资源的百分比,占用越高,进程越消耗资源. %MEM:该进程占用物理内存的百分比,占用越高,进程越消耗资源. VSZ:

Linux学习之日志管理(二十一)

Linux学习之日志管理 目录 日志管理 日志服务 rsyslogd的新特点 启动日志服务 常见日志的作用 日志文件的一般格式 rsyslogd日志服务 /etc/rsyslog.conf配置文件 服务名称 连接符号 日志等级 日志记录位置 日志轮替 日志文件命名 logrotate配置文件 logrotate命令 日志管理 日志服务 在Centos6.x中日志服务已经由rsyslogd取代了原先的syslogd服务.rsyslogd日志服务更加先进,功能更多.但是不论该服务的使用,还是日志文件

Linux学习之包管理

Linux学习之程序包管理 1.包管理器就是对应用程序打包和包管理的应用软件,包管理包括安装.升级.卸载.查询和校验管理. 最早出现的包管理器是debian的deb, 随后reahat才推出了其包管理器rpm:RedHat package manager,之后就不断完善成为现在RedHat衍生版以及suse的包管理器:所以rpm的定义随之成为:RPM is package manager. 程序包是由以下四个部分组成: 1.二进制程序:/bin,/sbin,/usr/bin,/usr/sbin

makefile 工程管理

GNU make Linux程序员必须学会使用GNU make来构建和管理自己的软件工程. GNU 的 make 能够使整个软件工程的编译.链接只需要一个命令就可以完成. Makefile make在执行时,需要一个名为Makefile的文件. Makefile文件描述了整个工程的编译,链接等规则. 其中包括哪些源文件需要编译以及如何编译: 需要创建哪些库文件以及如何创建这些库文件: 如何最后产生我们想要的可执行文件. Makefile(例子) hello:main.o func1.o func

linux 学习 14 日志管理

第十四讲 日志管理 14.1 日志管理-简介 1.日志服务 ?在CentOS 6.x中日志服务已经由rsyslogd取代了原先的syslogd服务.rsyslogd日志服务更加先进,功能更多.但是不论该服务的使用,还是日志文件的格式其实都是和syslogd服务相兼容的,所以学习起来基本和syslogd服务一致. ?rsyslogd的新特点: ?基于TCP网络协议传输日志信息; ?更安全的网络传输方式: ?有日志消息的及时分析框架: ?后台数据库: ?配置文件中可以写简单的逻辑判断: ?与sysl

4.Makefile工程管理

????使用GNU Make工具来管理程序是每个Linux工程师必须掌握的技能.Make能够使整个程序的编译.链接只需一个命令就可以完成.Make的工作主要依赖于一个叫作Makefile的文件.Makefile文件描述了整个程序的编译,链接等规则.其中包括:工程中的哪些源文件需要编译以及如何编译,如何最后产生我们想要的可执行文件. 例如: Makefile的规则: ? Makefile中有且只有一个最终目标,其它的目标都是被这个目标连带出来的,其中的目标都是被这个目标所连带出来的.一般来说,定义

Linux学习笔记——磁盘管理

废话不多说,直奔主题,磁盘常见的操作有创建.删除.查看磁盘分区,对磁盘进行软raid,创建磁盘阵列以及可以对磁盘重新组织,组建逻辑卷组以利于空间扩展.最后将创建的分区或者逻辑卷格式化后挂载使用.下边对相应的命令一一道来. fdisk [-l]  [device...] -l:查看硬盘挂载情况 [device]:所要操作的设备,例如/dev/sda 不使用-l 而直接后跟device则进入硬盘分区操作. 常用命令: -m:使用帮助: -p:显示指定磁盘的分区详细信息: -a:创建新分区: -d:删