日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Makefile和Shell学习笔记

發布時間:2023/11/27 生活经验 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Makefile和Shell学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Makefile

makefile定義了一系列的規則來指定文件編譯過程和一些復雜的功能操作。makefile帶來的好處就是——“自動化編譯”,通過make命令,整個工程完全自動編譯,極大的提高了軟件開發的效率。
makefile默認從第一個target開始執行command命令,如果后面的target不是第一個target的子程序或者子程序的后續程序,就不會在make命令下執行,需要使用make target命令執行相應的command的內容。

ECHO = echo		  #將編譯器選項定義為變量,提高makefile文件的可移植性
GCC = gccedit: tar test            #make命令默認執行第一個target及其依賴項@$(ECHO) compiling is finished!
tar:@$(ECHO) compiling......
test: test.o$(GCC) -o test test.o
test.o: test.c$(GCC) -c test.cclean:               #make clean執行非第一個target子程序的clean target@$(ECHO) cleaning......rm test test.o

Makefile的分層執行

執行子目錄下makefile文件,在當前目錄下mkdir subdir,在subdir目錄下創建相應的makefile文件和C程序文件edit.c,修改主目錄下makefile文件,包括編譯內容、clean內容。利用make -C 命令指定makefile的路徑。
主目錄下的makefile文件

ECHO = echo			
GCC = gcc
SUBDIR = subdiredit: tar test then       @$(ECHO) compiling is finished!
tar:@$(ECHO) The main program is compiling......
test: test.o$(GCC) -o test.o test
test.o: test.c$(GCC) -c test.c
then:
make -C $(SUBDIR)            #執行子目錄下makefile
clean:               make -C $(SUBDIR) cleansubdir    #執行子目錄下makefile中cleansubdir命令 
@$(ECHO) cleaning......rm test test.o

子目錄下的makefile文件

ECHO = echo			
GCC = gccfirst: tar editedit: tar test           @$(ECHO) compiling is finished!
tar:@$(ECHO) The subdirectory is compiling......
eidt: eidt.o$(GCC) -o edit.o edit
edit.o: edit.c        
$(GCC) -c edit.ccleansubdir:               @$(ECHO) The subdirectory is cleaning......rm edit edit.o

執行makefile文件的make命令編譯主目錄和子目錄下的.c文件,得到可執行程序;執行makefile文件的make clean命令,清除可能存在的.o文件和可執行文件。執行過程:
如果有多個子目錄,且子目錄都有各自的makefile文件,可以使用語句:

 ?for dir in $(SUBDIRS) ; do make -C $$dir || exit 1; done

利用for循環遍歷所有子目錄,同樣clean也可以使用此方法進行遍歷所有子目錄makefile后執行:

? ?for dir in $(SUBDIRS) ; do make -C $$dir clean; done

針對的的是各個子目錄下makefile文件和最后target為clean的情形。

Shell腳本

將多個shell命令按語法組合在一起,并保存在文本文件中即shell腳本。shell腳本可以方便地與系統交互,完成系統管理以及批處理任務。shell處于操作系統與應用之間,起到橋梁的作用。
寫一個判斷當前目錄下所有子項類別的shell腳本:

#!/bin/sh
for file in `ls`            #利用for循環遍歷目錄下所有子項if [ -f $file ]     #利用[]測試子項是否為常規類型thenecho "$file is a regular file"elif [ -d $file ]    #判斷子項是否為目錄thenecho "$file is a directory"elseecho "type of $file is unknown"fi
done
exit 0

執行結果:

?

在某些情境下,shell腳本可以方便開發工作,例如,在串口模式下更新嵌入式設備eMMC分區中的版本軟件,可以利用wget、scp拷貝或者下載遠端服務器上的版本文件,寫一個簡單腳本來實現:

#########################################################################
# File Name: get.sh
# Author: fupenzi
# Function: Getting version-software
# Created Time: 2019年09月21日 Saturday
# Usage:Excuting chmod u+x before the script
#########################################################################
#!/bin/shBOOT=BOOT.bin
F1=FILE_1.bin
F2=FILE_2.bin
F3=FILE_3.bin
IMA=image.ub
UP=upgrade.iniecho "Download $BOOT ..."
wget $1$BOOT -O $BOOT
echo "Download $F1 ..."
wget $1$F1   -O $F1
echo "Download $F2 ..."
wget $1$F2   -O $F2
echo "Download $F3 ..."
wget $1$F3   -O $F3
echo "Download $IMA ...."
wget $1$IMA  -O $IMA
echo "Download $UP ..."
wget $1$UP   -O $UP

將get.sh腳本寫入到版本文件分區,執行"./get.sh http鏈接"即可完成多個版本文件的一鍵更新(下載和覆蓋)。

?

總結

以上是生活随笔為你收集整理的Makefile和Shell学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。