【摘要】 介紹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[*]}"
-
編程
+關(guān)注
關(guān)注
88文章
3614瀏覽量
93685 -
Makefile
+關(guān)注
關(guān)注
1文章
125瀏覽量
19181 -
Shell腳本
+關(guān)注
關(guān)注
0文章
36瀏覽量
7971
發(fā)布評論請先 登錄
相關(guān)推薦
評論