嵌入式Linux開發工具

2021-07-26 07:40:29 字數 3562 閱讀 4270

3.工程管理器-make

make工程管理器也就是個「自動編譯管理器」,「自動」指它能夠根據檔案的時間戳自動發現更新過的檔案而減少檔案的編譯量,同時,它通過讀取makefile檔案來執行大量編譯   工作。**makefile是make讀入的唯一配置檔案!

makefile格式:

target:dependency_files

command/*該行必須以tab鍵開頭*/

例如:hello: hello.o

gcc -o hello hello.c

hello.o: hello.c

gcc -c hello.c

使用makefile:

$make

gcc -c hello.c -o hello.o

$lshello.c hello.h hello.o makefie

格式:hello : main.o func1.o fenc2.o  //hello是最終目標

gcc main.o func1.o func2.o -o hello

main.o : main.c

gcc -c main.c

func1.o : func1.c

gcc -c func1.c

func2.0 : func2.c

gcc -c func2.c

.phony : clean  //".phony"將"clean"宣告為偽目標(沒有任何依賴只有執行動作的目標稱為偽目標)

clean :

rm -f hello main.o func1.o func2.o

在makefile中規則的順序是很重要的!!因為makefile中只應該有乙個最終目標--第一條規則中的目標將被確立為最終的目標!

make命令預設在當前目錄下尋找名字為makefile或者makefile的工程檔案,當名字不為這兩個之一是可以使用make -f 檔名 指定

hello : main.o func1.o func2.o

gcc main.o func1.o func2.o -o hello

思考1:如果要為hello目標新增乙個依賴,如:func3.o,該如何修改?

答案1:

hello : main.o func1.o func2.o func3.o

gcc main.o func1.o func2.o hello.3-o hello

答案2:使用變數

obj=main.o func1.o func2.o func3.o

hello : $(obj)

gcc $(obj) -o hello

在makefile中,存在系統預設的自動化變數

$^:代表所有的依賴檔案

$@:代表目標

$<:代表第乙個依賴檔案

例:hello : main.o func1.o func2.o

gcc main.o func1.o func2.o -o hello

= 》hello : main.o func1.o func2.o

gcc $^ -o $@

makefile中「#」字元後的內容被視作注釋。

hello : hello.c

@gcc hello.c -o hello

@:取消回顯

client模板的使用

client目錄下的檔案目錄:

/bin:空的

/scripts/makefile(檔案):要修改的

/main 其中的目錄src中main.c檔案中修改**,(main的檔案可修改),在/src下定義標頭檔案#include"../../include/myhead.h"

/add

/sub

/mul

/div   以上5個目錄其中都包含乙個src目錄檔案和乙個makefile檔案,src目錄中放相應的.c檔案

makefile(檔案):不動

/include/myhead.h:修改

shell

shell是乙個命令列直譯器,作用是遵循一定的語法將輸入的命令加以解釋並傳給系統,使用者可以用shell來啟動、掛起、停止甚至是編寫一些程式。

shell既是一種命令語言,又是一種程式語言。作為命令語言,它互動式的解釋和執行使用者輸入的命令;作為程式語言,它定義了各種變數和引數,並提供了許多在高階語言中才具有的控制結構,包括迴圈和分支。

種類:bourne shell(sh) 和bourne again shell(bash)這兩種常用

[#!]讀作「沙棒」

編輯完後儲存,之後執行chmod +x helloworld 修改許可權

最後輸入./helloworld

例:#!/bin/sh

#對變數賦值:

a="hello world"

#現在列印變數a的內容:

echo "a is:"

echo $a

這個指令碼將會輸出:

a is:

hello world

例:s13:

num=2

echo 「this is the $nd」

這將列印:  「this is the 2nd」

預設變數:

$#:傳入指令碼的命令列引數個數

$*:所有命令列引數值,在各個引數值間留有空格

$0:命令本身(shell檔名)

$1:第乙個命令列引數

$2:第二個命令列引數

if語句:

if [expression]

then

#code block

else if[expression]

then

#code block

else

#code block

fifi

-e:檔案已存在

-f:檔案是普通檔案

-s:檔案大小不為零

-d:檔案是乙個目錄

-r:檔案對當前使用者可以讀取

-w:檔案對當前使用者可以寫入

-x:檔案對當前使用者可以執行

例s5:

#!/bin/sh

folder=/home

[ -r "$folder" ] && echo "can read $folder "

[ -f "$folder" ] || echo "this is not file"

for語句:

for var in [list]

do#code block

done

for var in [list];do (語句寫在同一行)

while語句:

while[condition]

do#code block

done

until語句:

until[condition] do

#code block

done

while 和 until 的區別在於while 為真時執行,until為假時執行;

case語句:

case "$var" in

condition1) ;;

condition1) ;;

*)default statements;;

esac 完~

嵌入式開發工具

嵌入式linux開發工具 vim,gcc.gdb,make vim 文字編輯器 學會使用和如何配置vim gcc 編譯器 學會製作動態庫和靜態庫及使用與區別 gdb 偵錯程式 設定斷點 單步執行 除錯記憶體錯誤 make 工程管理器 編寫makefile檔案 linux文字編輯器 vim 功能最強大...

嵌入式Linux開發工具(二)

隸屬於gnu計畫的工具 核心除錯kgdb 程式的錯誤分類 編譯時錯誤 語法錯誤 邏輯問題 記憶體錯誤 segmentation fault core dumped gdb的功能 執行程式 設定斷點 檢視變數值 下面展示一些gdb語法hello.c gcc g hello.c o hello gdb ...

嵌入式開發工具 WinSCP

嵌入式系統開發的乙個典型模式是 在windows平台下安裝vmware linux虛擬機器。這時候windows和linux系統之間的檔案傳輸就顯得非常重要。在windows和vmware linux虛擬機器之間實現檔案傳輸的方式很多,由於開發過程的繁瑣,我們通常都希望找到乙個非常方便的方式。使用w...