0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

DS小龙哥-嵌入式技术 2022-09-17 15:40 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

【摘要】 介绍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[*]}"
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程
    +关注

    关注

    90

    文章

    3708

    浏览量

    96765
  • Makefile
    +关注

    关注

    1

    文章

    125

    浏览量

    20202
  • Shell脚本
    +关注

    关注

    0

    文章

    36

    浏览量

    8451
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux 编程语言盘点:从内核到AI的全栈选择

    ,认为那才代表未来。 其实,这个问题没有标准答案。不同语言Linux 上的角色,就像工业系统里的不同模块——各司其职,协同配合。 今天,我们从工业开发者的视角,聊聊这个绕不开的话题。 一、
    的头像 发表于 11-06 17:05 431次阅读

    e203仿真报Syntax error: \"&amp;\"unexpected错误的原因

    “NO” 再试一下: ls -l /bin/sh 改成bash 再跑测试程序: 成功! 原因分析:dash和bash应该是shell脚本语言的两种解释方式,Ubuntu默认采用dash,导致语法错误。
    发表于 11-05 13:39

    【EASY EAI Nano-TB(RV1126B)开发板试用】命令行功能测试-shell脚本进行IO控制-红绿灯项目-实现开机起动

    0接上文【EASY EAI Nano-TB(RV1126B)开发板试用】命令行功能测试-shell脚本进行IO控制-红绿灯项目 Linux 起动系统下 init 系统大多数
    发表于 11-03 17:25

    蜂鸟hbird sdk的Makefile架构分析

    一.前言 简介: 蜂鸟系列的MCU开发工具分为基于SDK和图形化的IDE两种开发方式,我们采用了基于SDK的开发方式, SDK的构建主要由多个Makefile文件组成,本文主要介绍了各
    发表于 10-30 07:15

    使用其他烧录器进行 E203 CPU 程序下载,超实用技能!

    需要的文件如下: 第一个文件为 OpenOCD 需要的脚本文件,用于配置烧录器和CPU信息,具体内容如下: 该文件为Tcl脚本语言编写,注意到这里没有指定 Flash,因为Flash这个问题有点
    发表于 10-28 08:07

    Linux系统下编译C语言仿真蜂鸟E203(二)

    目录下,运行makefile脚本,采用ILM方式编译产生coremark.verilog二进制文件 如下所示: 通过readmem的方式将文件加载到itcm中,采用VCS编译器运行tb脚本,相关的编译
    发表于 10-24 13:38

    shell基本介绍及常用命令之shell基本介绍

    执行结果呈现给用户;同时Shell也是一种解释性的编程语言或者脚本语言开发容易可以在短时间内完成功能强大又好用的脚本,可以在不同的系统上移
    发表于 09-28 09:05

    Shell脚本入门指南

    Shell 是一块包裹着系统核心的壳,处于操作系统的最外层,与用户直接对话,把用户的输入, 解释给操作系统,然后处理操作系统的输出结果,输出到屏幕给与用户看到结果。
    的头像 发表于 06-03 10:47 993次阅读
    <b class='flag-5'>Shell</b><b class='flag-5'>脚本</b>入门指南

    【米尔-RK3562开发板试用评测】命令行功能测试-shell脚本进行IO控制-(绿色)RUN 灯、(红色)User灯

    在板上使用shell脚本语言简单明了开发效率高便于调试修改动态性强资源利用灵活但实时性不足。 shell脚本
    发表于 05-09 18:19

    树莓派新手必看!在树莓派上编写和运行 Shell 脚本

    在本教程中,我将讨论Shell脚本的基础知识、它们的用途以及如何在RaspberryPi上编写和运行Shell脚本。什么是Shell
    的头像 发表于 03-25 09:28 885次阅读
    树莓派新手必看!在树莓派上编写和运行 <b class='flag-5'>Shell</b> <b class='flag-5'>脚本</b>!

    零基础入门:如何在树莓派上编写和运行Python程序?

    是一种非常有用的编程语言,其语法易于阅读,允许程序员使用比汇编、C或Java等语言更少的代码行。Python编程语言最初实际上是作为Linux脚本
    的头像 发表于 03-25 09:27 1527次阅读
    零基础入门:如何在树莓派上编写和运行Python程序?

    【ELF 2学习板试用】命令行功能测试-shell脚本进行IO控制-红绿灯项目-实现开机起动

    接上文【ELF 2学习板试用】命令行功能测试-shell脚本进行IO控制-红绿灯项目 Linux 系统下 init 系统 大多数 Linux 发行版的 init 系统是和 System
    发表于 02-11 11:24

    【ELF 2学习板试用】命令行功能测试-shell脚本进行IO控制-灯闪

    root@elf2-buildroot:~# cmddemo_gpio.sh GPIO3_B5 0 //GPIO3_B5 拉低**** 在ELF 2学习板上使用shell脚本语言简单明了开发效率高
    发表于 01-25 15:30

    迅为RK3568开发板篇OpenHarmony实操HDF驱动控制LED-添加内核编译

    编译内核时将该 HDF 驱动编译到镜像中,接下来编写驱动编译脚本 Makefile,代码如下所示: 加入编译体系,填加模块目录到 drivers/hdf_core/adapter/khdf/linux/
    发表于 01-22 10:35

    飞凌嵌入式ElfBoard ELF 1板卡-Linux内核移植之Makefile介绍

    Linux应用开发的人员,那么写Makefile就是必备技能,就需要深谙Makefile语法规则。对于我们
    发表于 01-03 09:39