Linux开发_Makefile规则与Shell脚本语言

举报
DS小龙哥 发表于 2022/05/23 22:55:35 2022/05/23
【摘要】 介绍Linux下Makefile编程知识点,Shell脚本知识点。

任务1:静态库与动态库

[root@wbyq test]# arm-linux-gcc 123.c -o app_1

[root@wbyq test]# arm-linux-gcc -static 123.c -o app_2

Linux下库文件存放的位置: /lib (存放的是动态库)

.so属于动态库, .a属于静态库

动态库称为共享库:gcc 123.c -o app

共享库:程序在运行的时候去调用函数(载入函数)。

静态库:相关的函数在编译的时候就已经拷贝到目标中。

任务2:Makefile

Makefile :用于编写程序的编译规则。 make命令用于执行Makefile文件。

make常用的选项参数:

-n :输出命令的执行过程,不执行名称

-s :隐藏命令本身。 在命令前面加上@符号,可以隐藏命令本身。

$(shell pwd)

CC :特殊变量,用于存放编译器。

练习:

1.​ Makefile自动化编译

只是创建3个目录,每个目录下各有一个.c一个.h

在顶层目录下创建一个Makefile文件,实现自动化编译。

CC=gcc
VPATH=./abc
app:print.o main.o sum.o
	$(CC) $^ -o $@
%.o:%.c
	$(CC) $< -o $@ -c
clean:
	rm ./*.o app -rf

2.​ Makefile自动化编译

需要创建3个目录,每个目录下各有一个.c一个.h,一个Makefile文件

在顶层目录下创建一个Makefile文件,实现自动化编译。

特殊符号:

冒号用法: <目标文件>:<依赖文件1> <依赖文件2> ….

OBJECT=main.o print.o sum.o
CC=gcc
VPATH=main:sum:print
CFLAGS=-Imain -Isum -Iprint
app:$(OBJECT)
	$(CC) $^ -o $@

​ include 关键字

用法: include <路径或者具体的文件>


任务3:Shell脚本语言

Linux下常用的脚本语言。

变量、数组、for、while、函数、运算符、if、……..

[root@wbyq /]# ls /bin/sh -l

lrwxrwxrwx. 1 root root 4 12月 27 2016 /bin/sh -> bash

​ 变量定义使用

#!/bin/bash

ABC=12345

echo "ABC=$ABC"

echo "ABC=${ABC}"

​ Shell脚本传递参数 类似于C语言的argv argc

#!/bin/bash

echo "cnt=$#"

echo "[0]=$0"

echo "[1]=$1"

echo "[2]=$2"

echo "[3]=$3"

​ if语句语法规则

#!/bin/bash

a=10

b=20

if [ $a -eq $b ]

then

echo "123"

else

echo "456"

fi

​ 计算字符串长度


#!/bin/bash

string="abcd"

echo ${#string} #输出 4

​ 数组语法

#!/bin/bash

buff=(1 2 3 4 5 6 7 8 9)


buff[0]=88

buff[1]=99

buff[100]=100

buff[88]=55


echo "buff[0]=${buff[0]}"

echo "buff[1]=${buff[1]}"

echo "buff[2]=${buff[2]}"

echo "buff[100]=${buff[100]}"

​ echo用法示例

#!/bin/bash

DATA=12345

echo "DATA=${DATA}"

​ printf语句格式

#!/bin/bash

printf "%d\n" 1234

printf "%s\n" "45678"

​ 从键盘上读取数据

#!/bin/bash

echo -n "输入数据:" #参数-n 的作用是不换行, echo 默认是换行

read data #从键盘输入

echo "你输入的数据为: $data" #显示信息


知识点总结:

#!/bin/bash

#if使用方式1
if [ 1 -eq 2 -o 1 -lt 5 ]
then
	echo "条件为真"
else
	echo "条件为假"
fi

#if使用方式2
if((1==2 || 1==1))
then
	echo "条件为真"
else
	echo "条件为假"
fi

#for循环的使用方式1
for i in 1 2 3 4 5
do
	echo "i=$i"
done

#for循环的使用方式2
for((i=0;i<5;i++))
do
	echo "i=$i"
done


#while循环的使用方式1
i=0
while [ $i -lt 5 ]
do
	#i=`expr $i + 1`
	let i=i+1+34-4   #算术运算
	echo "i=$i"
done


#while循环的使用方式2
i=10
while((i<15))
do
	((i++))  
	echo "i=$i"
done


#数组当做函数的形参进行传递
func()
{
	echo ${buff[0]}
	echo ${buff[1]}
	echo ${buff[2]}
	echo ${buff[3]}
}

buff[0]=a
buff[1]=b
buff[2]=c
buff[3]=d

func ${buff[*]}  #数组的传递


#获取命令的执行状态

#方式1 (获取返回值)
data=`ls -l` 
echo "data1=$data"

#方式2 (获取命令执行状态)
ls -l
echo "data2=$?"


​ Shell脚本练习:

1.​ 从键盘上输入年份,判断平年闰年。

2.​ 输出9*9乘法口诀表

3.​ 冒泡排序。

#!/bin/bash
echo -n "请输入排序数据的数量:" 
read max_cnt

echo -n "请输入数据(输入一个数据按下回车键)"

cnt=0
while [ $cnt -lt $max_cnt ]
do
	read buff[$cnt]
	#((cnt++))
	cnt=`expr $cnt + 1`
done
echo "数组的数据=${buff[*]}"


#实现冒泡排序
max_cnt=`expr $max_cnt - 1`

i=0
j=0
tmp=0
while [ $i -lt $max_cnt ]
do
	while [ $j -lt $max_cnt ]
	do
		if [ ${buff[$j]} -lt ${buff[`expr $j + 1`]} ]
		then
			tmp=${buff[$j]}
			buff[$j]=${buff[`expr $j + 1`]}
			buff[`expr $j + 1`]=$tmp
		fi
		j=`expr $j + 1`
	done
	j=0
	i=`expr $i + 1`
done

echo "排序之后的数据=${buff[*]}"


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。