day 5 (C高级) (Makefile)

文章介绍了SHELL中函数的定义、参数获取及返回值方法,通过示例展示了如何计算数组元素和检查系统用户信息。此外,还详细讲解了Makefile的作用、语法,包括规则、依赖、变量以及通配符的使用,并给出了完整的Makefile示例。
摘要由CSDN通过智能技术生成

一、SHELL中的函数

1格式

function 函数名 ()
{
shell 语句
}

shell函数中任然遵循点定义后调用的规则,但是在shell中,函数的定义和声明不能分开,只能把函数定义在函数调用的上方、

shell函数中的变量

shell修饰变量
unset :清空变量----------------不能清空只读变量
readonly:只读变量
local:局部变量----------只能在函数中定义

2参数获取

通过位置变量获取参数

$ 1…$ n…$ 1------->9以上${10}
$#传参个数
$* $@ 所有参数

3返回值

return
echo

练习

<1>把计算数组元素封装成一个函数

#!/bin/bash

function grepsum()
{
	sum=0
	for i in ${arr[*]}
	do
		((sum+=i))
	done
	echo $sum

}
arr=(12 1 2 3 4 5)
grepsum ${arr[*]}

结果:
在这里插入图片描述

<2>输入用户的名字,判断该系统上是否存在该用户

(封装函数get_user_line(),若用户存在返回在/etc/passwd中的行号)
若存在该用户,将用户的gid和uid显示出来
(封装函数get_user_info),将上述函数返回的行号传递到这个函数中,返回uid和gid)

#!/bin/bash
read -p "输入用户的名字" name
function get_user_line()
{
	user=`grep "^$name" /etc/passwd -n`
	num=`echo $user | cut -d ":" -f 1`
	if test -z $user
	then 
		return "$name用户不存在"
	else
		echo "行号$num"
		return $num
	fi
}
get_user_line $1
a=$?
function get_user_info()
{
	str=`head -$a /etc/passwd | tail -1 `
	echo $str
	uid=`echo $str | cut -d ":" -f 3`
	gid=`echo $str | cut -d ":" -f 4`
	echo "uid:$uid"
	echo "gid:$gid"
}

结果:
在这里插入图片描述

Makefile

1makefile 是一个工程管理项目文件

2学习Makefile的前提

(1)编译过程

(2)变量基础

(3)目标和依赖思想

预处理 编译 汇编 链接
gcc -E .c -o .i
gcc -S .i -o .s
gcc -C .s -o .o
gcc .o -o exe
.i文件依赖于.c文件

3Makefile的语法

规则和依赖组成
变量

规则的构成
目标
依赖
命令
一个目标可以没有依赖,可以没有命令
一个目标也可以有多个依赖
一个规则必须有多个目标

Makefile把程序分为两步
源文件------汇编文件
汇编文件-----可执行文件
当文件发生修改,Make file会根据,文件的时间戳判断文件是否更新,再决定是否重新编译
all :hello
hello:main.o hello.o
gcc main.o hello.o -o hello
main.o:mainc
gcc -c main.c -o main.o
hello.o:hello.c
gcc -c hello.c -o hello.o

4Makefile 中的变量

可以理解为宏定义
${变量名}

(1)自动变量---------(在规则范围内的)

$^--------------------所有依赖
$@------------------所有目标
$<--------------------第一个依赖

(2)赋值

=:延迟赋值
+=:追加赋值
:=:直接赋值
?=:条件赋值----------------如果变量前面有值就不赋值

5Make file通配符

%---------------目标和依赖之间的唯一匹配

6最终版的makefile

CC = gcc
EXE = hello
OBJS += main.o
OBJS += hello.o

all:${EXE}
${ExE}:${OBJS}
   ${CC} $^ -o $@ 
%.o:%.c
   ${CC} -c $^ -o $@
clean:
    rm *.c  ${EXE}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kei歪歪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值