目錄
一、Linux 編寫第一個自己的命令
1.命令的概念
2.定義一個自己的命令
二、make 工具和 makefile 文件
1.使用 make 工具
2.makefile文件
一、Linux 編寫第一個自己的命令
1.命令的概念
????????命令就是可執行程序。
????????比如說我們輸入 ls -al ,ls 就是可執行程序的的名字。-al 就是要傳遞進去的參數。
????????ps 命令:
????????功能:顯示進程的動態。
????????輸入 “ps” 命令
????????當 shell 接收到我們的命令以后,會根據我們輸入的字符到環境變量和默認路徑中去找,環境變量上一 章提過,可以通過打印查看都有哪些環境變量,然后它會去尋找有沒有名字和我們輸入命令一樣的程序。
2.定義一個自己的命令
????????進入/home/topeet/test 目錄,把原來的都刪掉,作者這里先創建一個 .c 文件,使用“touch commond.c ”命令,使用命令“vi commond.c ”打開文件,然后輸入以下內容:
#include <stdio.h>
int main(void)
{printf(“This is my commod!\n”);return 0;
}
????????接著使用命令“gcc commond.c -o commond ”編譯 commond.c 文件,然后運行一下,使用“./commond ”命 令 , 雖然 我 們 現 在 可以 執 行 這 個 可 執行 文 件 , 但 是 現在 我 們 現 在 的這 個 可 執 行 程 序只 能 在/home/topeet/test 這個路徑下輸入,而且我們還要加上當前目錄,如果我切換到上一級目錄,就不能用“ ./commond ”來運行 commond ,因為當前目錄下沒有 commond 這個文件,我們直接輸入命令“commond ”也不行,會提示錯誤。
????????我們上一章學了環境變量,環境變量里邊 PATH 變量決定了我們的程序或者是命令都要去哪些路徑下找,那我們可以把存放可執行程序的路徑加到環境變量里面,那么在任意路徑下輸入 commond 這個命令,它就會自動找到 commond 這個可執行文件來幫助我們執行。
????????我們前面學到的根目錄下的 bin 文件是專門存放可執行文件的,我們直接把生成的這個 commond 可執行性文件拷貝到根目錄下 bin 文件夾也是可以的。即用 cp 命令拷貝到 bin 文件夾,作者輸入 “cpcommond /bin/ ”,提示沒有權限,加上 sudo ,然后直接輸入“commond ”,可以看到打印 This is my commond! ,然后再返回上一級,這個路徑下是沒有 commond 這個程序的,我再輸入“ commond ”,也是可以執行成功的,所以用這個方法是可以的。
????????我們不使用這個方法,我們把存放 commond 這個可執行文件的路徑加到 PATH 這個變量里面去,先把剛才我們拷貝到 bin 文件夾下的可執行文件把它刪掉。
????????我們直接使用命令來添加,“export PATH=/home/topeet/test/:$PATH ”,添加環境變量的辦法上一章已經講到了,使用命令“echo $PATH ”來檢查是否添加成功,現在就已經成功添加進去了,如下圖所示。我們輸入“ commond ”這個命令來測試,也能執行成功,然后我在換另一個目錄,作者把它切換到 Videos 這個文件夾里面去,輸入“ cd Videos”,然后在輸入 commond ,同樣也能執行成功,同時也驗證了之前的說法,命令就是可執行文件。
????????本章是把我們之前學到的進行一個串通。比如說環境變量的修改, gcc 的編譯。同時我們也知道了平常使用的命令就是一個可執行程序,而且在鍵盤上輸入了我們的命令之后,這個命令發給了 shell 。也就是如下圖的這個 bash,是發送給它的,然后它會根據我們輸入的這個字符串去環境變量里面去找,去看看有
沒有和我們的名字一樣的程序。
二、make 工具和 makefile 文件
????????前面我們在編寫 linux 上第一個程序 hello world 的時候是直接使用 gcc 命令的。我們編譯一個程序是非常的簡單的,直接輸入 gcc 然后跟上程序的名稱再跟上指定生成程序的名稱,就可以很輕松的編譯出 hello這個可執行文件了。但是如果我們以后工作的時候要編譯一個工程,這個工程里面有很多的源文件,這時候我們全部使用這個命令來編譯那就非常的麻煩了,而且如果我們修改了一個源文件,那么我們使用命令來編譯就要再次執行一遍這個過程,就會非常的耗時間。
????????如果有小伙伴以前學習過單片機,大家可以類比下單片機開發軟件 keil 里面的單獨編譯和全部編譯。單獨編譯是很省時間的,全部編譯就會非常的耗時間,我們使用命令來編譯就相當于我們單片機軟件中的全部編譯。為了解決編譯一個工程非常繁瑣這個問題,前人就給我們發明了編譯輔助工具 make 工具,它的編譯思路是非常簡單的,它會在編譯之前先比較哪個文件的時間發生了改變,如果說這個文件它修改的時間要晚于編譯生成的文件,那么它就會按照要求重新構建這些文件,而不是說再浪費時間重新構建其他的文件了。假如在單片機上用 keil 寫了一個 c 文件,這個工程里邊別的文件沒有改,那么我們就不用點全部編譯,只要編譯一下我們修改過的文件就可以了。make 也是這樣的,只不過它比較聰明,它不用再人為
的去判斷了,在編譯之前會自動幫我們判斷。
1.使用 make 工具
????????make 工具是編譯輔助工具,用來解決使用命令編譯工程非常繁瑣的問題。
????????調用這個命令工具:我們在 windows 上編程使用 ide ,我們有圖形界面,有相應的按鈕,比如說 build或者 run 來編譯。其實 make 這個編譯輔助工具使用也是非常簡單的,我們在控制臺上直接輸入 make 命令,它就會自動調用 make 工具。
? ? ? ? 我們來直接在這個目錄下輸入 make ,然后報錯了,因為我沒有告訴 make 這個工具它按照什么規則來編譯我們的程序。如下圖所示。
2.makefile文件
????????Makefile 就是描述了整個工程編譯連接等規則的文件。我們在終端輸入完 make 命令之后,調用 make工具,make 就會在當前目錄按照文件名就會找 makefile 文件,Makefile 的命名必須是 makefile 或 Makefile ,m 大寫小寫都是可以的。
???????我們剛才輸入命令報錯的原因是因為在當前目錄下是沒有 makefile 這個文件的,作者這里新建一個Makefile 文件,然后在當前目錄下輸入 make 命令,我輸入完 make 命令,它就會調用 make 工具,make工具就會在當前目錄下找到 makefile 這個文件,這里又報錯了,因為作者這里創建的 makefile 文件,他雖然找到了但是里面是空的,因為沒有包含任何的規則。如下圖所示。
????????接下來先給大家寫一個簡單的來試一下,打開 makefile 文件,敲的時候一定要按 Tab 首行縮進,不能用空格,然后我們輸入內容,保存退出,如下圖所示。
????????然后輸入 make ,在當前這個目錄下,成功的生成 hello 這個可執行文件,執行一下,可以看到成功輸出了,到這里我們的編譯流程就已經講完了,我們也成功的利用 makefile 文件和 make 工具,把 hello.c 編譯成了 hello 可執行文件。如下圖所示。
????????我們弄清楚了什么是 make 工具,怎么來調用 make 工具,makefile 又是什么,弄清楚了他們的關系后,后面我們再學習 makefile 語法和裸機編寫 makefile 時,就非常的容易了。