Linux入門篇學習——Linux 編寫第一個自己的命令,make 工具和 makefile 文件

目錄

一、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 時,就非常的容易了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/88569.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/88569.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/88569.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

實驗一 接蘋果

主要步驟蘋果樹制作&#xff08;蘋果與籃子的制作同理&#xff09;為蘋果添加標簽相機位置設置與游戲面板長寬比設置&#xff08;16:9&#xff09;蘋果下落設置&#xff08;將蘋果從平拋運動改為垂直下落&#xff09;通過設置物理圖層并更改碰撞矩陣表實現通過PlayerPrefs實現游…

Nginx服務器集群:橫向擴展與集群解決方案

橫向擴展&#xff1a;基礎概念 在深入了解Nginx的橫向擴展細節之前&#xff0c;首先理解橫向擴展的含義及其重要性。橫向擴展是指通過增加服務器數量來分散負載并提升整體性能。這與縱向擴展形成對比&#xff0c;縱向擴展是指在單個服務器上增加更多資源&#xff08;如CPU、內…

缺陷的生命周期(Bug Life Cycle)是什么?

一、缺陷生命周期的定義缺陷生命周期是指一個Bug從被發現到最終關閉的完整流程&#xff0c;反映了缺陷在不同角色&#xff08;測試、開發、產品等&#xff09;間的流轉狀態。它是軟件測試流程的核心管理模型&#xff0c;直接影響團隊協作效率。二、標準缺陷生命周期階段以下是通…

AtCoder Beginner Contest 333(A,B,C,D,E,F)

AtCoder Beginner Contest 333 A 題意 輸出n個n(n<9) 代碼 #include<bits/stdc.h> using namespace std; void solve(){int n;cin>>n;for(int i1;i<n;i)cout<<n; } signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T__1;//cin…

留學真相:凌晨兩點被海關攔下時,我才明白人生沒有退路

> 獨立不是選擇&#xff0c;而是生存的必修課下飛機那一刻&#xff0c;幻想中的“鍍金生活”瞬間崩塌。倫敦海關凌晨兩點的燈光下&#xff0c;你顫抖著翻找學校文件&#xff0c;手機信號格空空如也&#xff1b;大巴誤點后&#xff0c;你拖著兩個32公斤的行李箱站在陰雨中&am…

探索AIGC領域DALL·E 2的圖像生成與人類創意的融合

探索AIGC領域DALLE 2的圖像生成與人類創意的融合關鍵詞&#xff1a;AIGC、DALLE 2、圖像生成、人類創意、創意融合摘要&#xff1a;本文聚焦于AIGC領域中DALLE 2的圖像生成技術與人類創意的融合。首先介紹了相關背景&#xff0c;包括DALLE 2的發展歷程和人類創意在藝術創作中的…

【ECharts】多個ECharts版本共存解決方案

多個ECharts版本共存解決方案 在單個HTML頁面中使用多個ECharts版本的關鍵在于避免全局命名空間沖突。下面我將展示一個完整的解決方案&#xff0c;包含兩種不同的實現方法。 解決方案思路命名空間隔離法&#xff1a; 使用不同的全局變量名保存不同版本的ECharts在加載新版本前…

力扣熱門算法題 204.計數質數,207.課程表,213.打家劫舍II

力扣熱門算法題 204.計數質數&#xff0c;207.課程表&#xff0c;213.打家劫舍II&#xff0c;每題做詳細思路梳理&#xff0c;配套Python&Java雙語代碼&#xff0c; 2025.07.07 可通過leetcode所有測試用例。 目錄 204.計數質數 解題思路 完整代碼 207.課程表 解題思…

深入理解 macOS 的 quarantine、xattr 與 Gatekeeper

在 macOS 上安裝第三方應用時&#xff0c;你是否遇到過如下提示&#xff1f; “xxx.app 已損壞&#xff0c;無法打開。”“無法打開‘xxx.app’&#xff0c;因為它來自身份不明的開發者。”“你確定要打開這個應用嗎&#xff1f;它是從互聯網下載的。” 這些提示背后&#xff0…

FastAPI學習筆記記錄

FastAPI 學習筆記 最近在公司中需要寫接口&#xff0c;選取了fastapi這個框架&#xff0c;一個原因是FastAPI 是主流框架&#xff0c;同時FastAPI 有著高性能&#xff0c;支持異步和高并發。 FastAPI 安裝 直接用下面兩行命令進行安裝 pip3 install fastapi pip install uvicor…

HTML(上)

1.web標準主要包括結構(Structure)、表現(Presentation)和行為(Behavior)三個方面。1.1 結構結構用于對網頁元素進行整理和分類&#xff0c;核心技術&#xff1a;HTML。 HTML (HyperText Markup Language)&#xff1a;超文本標記語言&#xff0c;用于定義網頁的內容和結構&…

杭州樂灣科技有限公司的背景、產品體系與技術能力的全方位深度分析

杭州樂灣科技有限公司的背景、產品體系與技術能力的全方位深度分析 文章目錄杭州樂灣科技有限公司的背景、產品體系與技術能力的全方位深度分析**一、公司背景&#xff1a;智慧養老賽道領跑者****1. 基礎信息****2. 發展里程碑****二、產品體系&#xff1a;全域智慧養老解決方案…

kettle從入門到精通 第101課 ETL之kettle DolphinScheduler調度kettle

1、下載DolphinSchedulerDolphinScheduler官網下載安裝包&#xff0c;選擇合適的版本進行下載&#xff0c;地址為https://dolphinscheduler.apache.org/zh-cn/docs/3.1.9/guide/installation/standalone2、啟動 DolphinScheduler Standalone Server我這里僅僅為了測試使用&…

微信小程序121~130

1.小程序功能開發-首頁功能 通過并發請求獲取首頁的數據。 // 導入封裝的網絡請求模塊實例 import http from ../utils/http // 定義接口api函數 export const reqIndexData () > {// 通過方式請求并獲取首頁數據&#xff0c;提升頁面渲染速度// 通過Promise.all進行并發請…

Java Stream流:高效數據處理全解析

Java Stream 流詳解 Stream 是 Java 8 引入的 API&#xff0c;用于高效處理集合數據&#xff08;如 List、Set、Map 等&#xff09;。它支持函數式編程風格&#xff0c;能實現復雜的查詢、過濾、映射等操作&#xff0c;并支持并行處理以提升性能。核心特點 非存儲數據結構&…

光子精密雙目3D線激光輪廓測量儀,擺脫視覺盲區,1臺更比2臺強!

光子精密雙目3D線激光輪廓測量儀&#xff08;GL-8160D&#xff09;&#xff0c;在GL-8000系列的基礎上創新升級。GL-8160D采用全新雙目單線設計&#xff0c;突破傳統3D視覺檢測限制&#xff0c;而且不受外部拼接標定誤差影響&#xff0c;有效消除單目盲區&#xff0c;抗光干擾能…

基于Linux驅動的可見光通信方案 —— 開源 OpenVLC 平臺入門(附 BeagleBone Black 驅動簡單解析)

60 美元玩轉 Li-Fi —— 開源 OpenVLC 平臺入門&#xff08;附 BeagleBone Black 及驅動解析&#xff09;一、什么是 OpenVLC&#xff1f; OpenVLC 是由西班牙 IMDEA Networks 研究所推出的開源可見光通信&#xff08;VLC / Li-Fi&#xff09;研究平臺。它把硬件、驅動、協議棧…

Git系列--4.Git分支設計規范

目錄 一、了解開發環境 1.1概念闡述 1.2系統概括圖 二、設計規范之GitFlow模型 2.1具體分支概念 2.1.1master 分? 2.1.2release 分? 2.1.3develop 分? 2.1.4feature 分? 2.1.5hotfix 分? 2.2宏觀表格 三、分支流程圖 一、了解開發環境 1.1概念闡述 對于開發人員…

【時間之外】AI在農機配件設計場景的應用

目錄 農機制造業痛點 AI場景暢想 落后就要挨打 農機制造業痛點 最近&#xff0c;我與一位在制造業摸爬滾打多年的老友相聚。酒過三巡&#xff0c;話題漸漸轉到他的事業上。他興致勃勃地跟我講起&#xff0c;自己正主導著一個規模達幾千萬的項目&#xff0c;生產基地遠在孟加…

基于定制開發開源AI智能名片與S2B2C商城小程序的旅游日志創新應用研究

摘要&#xff1a;本文探討了旅游日志在記錄旅行美景與人物中的重要性&#xff0c;結合當下數字化發展趨勢&#xff0c;引入定制開發開源AI智能名片與S2B2C商城小程序的概念。分析如何將這兩者與旅游日志風格元素相融合&#xff0c;打造一種創新的旅游記錄與分享模式&#xff0c…