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]=
echo "[0]=$0"
"echo "[1]="
echo "[2]="
echo "[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[*]}"
Linux Makefile Shell
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。