RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux開發(fā)_Makefile規(guī)則與Shell腳本語言

DS小龍哥-嵌入式技術(shù) ? 2022-09-17 15:40 ? 次閱讀

【摘要】 介紹Linux下Makefile編程知識點(diǎn),Shell腳本知識點(diǎn)。

任務(wù)1:靜態(tài)庫與動態(tài)庫

[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 (存放的是動態(tài)庫)

.so屬于動態(tài)庫, .a屬于靜態(tài)庫

動態(tài)庫稱為共享庫:gcc 123.c -o app

共享庫:程序在運(yùn)行的時候去調(diào)用函數(shù)(載入函數(shù))。

靜態(tài)庫:相關(guān)的函數(shù)在編譯的時候就已經(jīng)拷貝到目標(biāo)中。

任務(wù)2:Makefile

Makefile :用于編寫程序的編譯規(guī)則。 make命令用于執(zhí)行Makefile文件。

make常用的選項(xiàng)參數(shù)

-n :輸出命令的執(zhí)行過程,不執(zhí)行名稱

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

$(shell pwd)

CC :特殊變量,用于存放編譯器。

練習(xí):

1.?Makefile自動化編譯

只是創(chuàng)建3個目錄,每個目錄下各有一個.c一個.h

在頂層目錄下創(chuàng)建一個Makefile文件,實(shí)現(xiàn)自動化編譯。

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自動化編譯

需要創(chuàng)建3個目錄,每個目錄下各有一個.c一個.h,一個Makefile文件

在頂層目錄下創(chuàng)建一個Makefile文件,實(shí)現(xiàn)自動化編譯。

特殊符號:

冒號用法: <目標(biāo)文件>:<依賴文件1> <依賴文件2> ….

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

??include 關(guān)鍵字

用法: include <路徑或者具體的文件>

任務(wù)3:Shell腳本語言

Linux下常用的腳本語言。

變量、數(shù)組、for、while、函數(shù)、運(yùn)算符、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腳本傳遞參數(shù) 類似于C語言的argv argc

#!/bin/bash

echo "cnt=$#"

echo "[0]=$0"

echo "[1]=$1"

echo "[2]=$2"

echo "[3]=$3"

??if語句語法規(guī)則

#!/bin/bash

a=10

b=20

if [ $a -eq $b ]

then

echo "123"

else

echo "456"

fi

??計算字符串長度

#!/bin/bash

string="abcd"

echo ${#string} #輸出 4

??數(shù)組語法

#!/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"

??從鍵盤上讀取數(shù)據(jù)

#!/bin/bash

echo -n "輸入數(shù)據(jù):" #參數(shù)-n 的作用是不換行, echo 默認(rèn)是換行

read data #從鍵盤輸入

echo "你輸入的數(shù)據(jù)為: $data" #顯示信息

知識點(diǎn)總結(jié):

#!/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循環(huán)的使用方式1
for i in 1 2 3 4 5
do
	echo "i=$i"
done

#for循環(huán)的使用方式2
for((i=0;i<5;i++))
do
	echo "i=$i"
done
#while循環(huán)的使用方式1
i=0
while [ $i -lt 5 ]
do
	#i=`expr $i + 1`
	let i=i+1+34-4   #算術(shù)運(yùn)算
	echo "i=$i"
done
#while循環(huán)的使用方式2
i=10
while((i<15))
do
	((i++))  
	echo "i=$i"
done
#數(shù)組當(dāng)做函數(shù)的形參進(jìn)行傳遞
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[*]}  #數(shù)組的傳遞
#獲取命令的執(zhí)行狀態(tài)

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

#方式2 (獲取命令執(zhí)行狀態(tài))
ls -l
echo "data2=$?"

??Shell腳本練習(xí):

1.?從鍵盤上輸入年份,判斷平年閏年。

2.?輸出9*9乘法口訣表

3.?冒泡排序。

#!/bin/bash
echo -n "請輸入排序數(shù)據(jù)的數(shù)量:" 
read max_cnt

echo -n "請輸入數(shù)據(jù)(輸入一個數(shù)據(jù)按下回車鍵)"

cnt=0
while [ $cnt -lt $max_cnt ]
do
	read buff[$cnt]
	#((cnt++))
	cnt=`expr $cnt + 1`
done
echo "數(shù)組的數(shù)據(jù)=${buff[*]}"
#實(shí)現(xiàn)冒泡排序
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 "排序之后的數(shù)據(jù)=${buff[*]}"
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3614

    瀏覽量

    93685
  • Makefile
    +關(guān)注

    關(guān)注

    1

    文章

    125

    瀏覽量

    19181
  • Shell腳本
    +關(guān)注

    關(guān)注

    0

    文章

    36

    瀏覽量

    7971
收藏 人收藏

    評論

    相關(guān)推薦

    Linux從零到精通:最簡單的Shell腳本入門教程

    case語句 shell變量數(shù)組 shell腳本前言 |為什么學(xué)習(xí)shell編程 Shell腳本語言
    的頭像 發(fā)表于 12-05 09:56 ?388次閱讀
    <b class='flag-5'>Linux</b>從零到精通:最簡單的<b class='flag-5'>Shell</b><b class='flag-5'>腳本</b>入門教程

    微軟生成式AI腳本GenAIScript的安裝與配置

    GenAIScript 是一種結(jié)合了生成式人工智能(Generative AI,簡稱 GenAI)和腳本編寫能力的新型腳本語言。
    的頭像 發(fā)表于 11-07 09:13 ?215次閱讀
    微軟生成式AI<b class='flag-5'>腳本</b>GenAIScript的安裝與配置

    TCSH shell 編程入門

    ICer從業(yè)人員最先需要掌握的語言,就是linux shell語言。TCSH是ICer使用最多的Shell
    發(fā)表于 11-01 10:45 ?0次下載

    shell腳本執(zhí)行的三種方式及區(qū)別

    Linux系統(tǒng)中,Shell腳本是一種非常實(shí)用的工具,用于自動化執(zhí)行一系列命令。Shell腳本可以大大提高工作效率,簡化復(fù)雜的任務(wù)。在這篇
    的頭像 發(fā)表于 08-30 15:24 ?1009次閱讀

    執(zhí)行shell腳本的方式包括什么

    執(zhí)行Shell腳本的方式有很多種,以下是一些常見的方法: 直接運(yùn)行腳本文件 在命令行中,可以直接使用腳本文件的路徑來運(yùn)行腳本。例如: ./s
    的頭像 發(fā)表于 08-30 15:17 ?316次閱讀

    飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫之變量

    變量是任何一種編程語言都必不可少的組成部分,變量用來存放各種數(shù)據(jù)。腳本語言在定義變量時通常不需要指明類型,直接賦值就可以,Shell變量也遵循這個規(guī)則。每一個變量的值都是以字符串的形式
    發(fā)表于 08-29 11:04

    shell腳本編寫之本地腳本的編寫和執(zhí)行

    的使用可以參考下一節(jié))將變量值輸出進(jìn)行查看,如下圖,可以看到?jīng)]有輸出var的值;然后再使用source或. 進(jìn)行腳本執(zhí)行,再次查看var變量的值,可以看到成功輸出235,該方式執(zhí)行腳本后的變量,沒有釋放,所以我們經(jīng)常使用source來配置
    發(fā)表于 08-28 09:36

    【龍芯2K0300蜂鳥板試用】+3.移植lua到loongarch

    ,輸入$CC就可以編譯了,輸入loongarch64-linux-gnu-gcc *.c -o lua -lm -O3。生成可執(zhí)行文件lua 將可執(zhí)行文件拖到開發(fā)板中,并添加可執(zhí)行權(quán)限,并執(zhí)行l(wèi)ua 進(jìn)入lua編輯,輸入命令行簡單對lua測試,打印一個字符串 接下來就可以
    發(fā)表于 08-18 03:31

    嵌入式學(xué)習(xí)-shell介紹

    輸出執(zhí)行結(jié)果呈現(xiàn)給用戶;同時Shell也是一種解釋性的編程語言或者腳本語言,開發(fā)容易可以在短時間內(nèi)完成功能強(qiáng)大又好用的腳本,可以在不同的系統(tǒng)
    發(fā)表于 08-16 09:13

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

    輸出執(zhí)行結(jié)果呈現(xiàn)給用戶;同時Shell也是一種解釋性的編程語言或者腳本語言,開發(fā)容易可以在短時間內(nèi)完成功能強(qiáng)大又好用的腳本,可以在不同的系統(tǒng)
    發(fā)表于 08-15 09:28

    語言RPA中有哪些優(yōu)勢,可以提高開發(fā)效率?

    語言RPA提供了多種資源和工具來幫助用戶提高開發(fā)效率,以下是一些值得關(guān)注的點(diǎn): 1、跨平臺兼容:火語言支持在Win, Mac, Linux上三端跨平臺運(yùn)行,一個
    的頭像 發(fā)表于 08-07 13:40 ?321次閱讀

    關(guān)于Makefile自動生成-autotools的使用

    Linux應(yīng)用開發(fā)中,編寫Makefile是一項(xiàng)必備技能,因?yàn)樗x了工程中所有文件的編譯順序、規(guī)則和依賴關(guān)系,決定了哪些文件需要編譯以及它們的編譯順序。 雖然對初級
    的頭像 發(fā)表于 07-25 15:50 ?1497次閱讀
    關(guān)于<b class='flag-5'>Makefile</b>自動生成-autotools的使用

    linux系統(tǒng)中Makefile的使用方法

    Makefile是一種編譯控制文件,廣泛用于項(xiàng)目的自動化構(gòu)建。它定義了一系列的規(guī)則來指導(dǎo)構(gòu)建的過程。通過Makefile,開發(fā)者可以輕松管理大型項(xiàng)目的編譯鏈接、清理等任務(wù)。本文將從
    的頭像 發(fā)表于 05-11 08:49 ?649次閱讀

    RISC-V Linux開發(fā)環(huán)境腳本

    比較多的RISC-V SOC Linux開發(fā)環(huán)境使用CMake/Makefile,雖然也知道些怎么用,但有沒完整系統(tǒng)的這方面學(xué)習(xí)資料?如語法、腳本鏈接結(jié)構(gòu)等,可以分享下深入學(xué)習(xí)
    發(fā)表于 03-31 12:48

    Shell腳本檢查工具ShellCheck介紹

    ShellCheck是一個用于bash/sh shell腳本的靜態(tài)分析工具,可以輔助檢查腳本語法錯誤,給出建議增強(qiáng)腳本健壯性。
    的頭像 發(fā)表于 12-27 13:43 ?2101次閱讀
    <b class='flag-5'>Shell</b><b class='flag-5'>腳本</b>檢查工具ShellCheck介紹
    RM新时代网站-首页