Linux 基礎環境的開發工具以及使用(下)

?1. make / Makefile 自動化構建的工具

1)引入

在我們進行一些大型的工程的時候,代碼量是極其大,當我們代碼在進行一系列的編譯的時候,難免會出現一些錯誤,當我們對錯誤進行一系列的更改之后,難道我們需要再重新敲剛剛一系列的相關指令嗎?? 假設我們有上百個源代碼,每一個都需要重新敲入相關的指令嗎?? 這難免比較耗時。那有沒有一些工具,可以進行對文件的相關編譯原則,我們只需要輸入指定的簡短的指令,來完成對上百個源代碼的編譯。

make/Makefile 就是一個解決上述問題的自動化工具。

make:是一條指令

Makefile: 是一個包含一系列編譯原則的文件通過調用make? 指令來完成指定文件的編譯。他用

于告訴 make 程序如何編譯和鏈接一個程序。它包含了目標(target)、依賴關系

(dependencies)、命令(commands)等內容,使得我們可以通過簡單的命令來構建和管理復雜

的軟件項目。

2)使用

I)首先創建一個 makefile / Makefile 文件

touch makefile/Makefile

II) Makefile? 里面的內容:存放依賴的 關系以及依賴方法

對指定文件進行預編譯,編譯,匯編,鏈接對應的指令 ,這里不再一一贅述,可見上篇博客文件編譯對應的指定指令

III)在命令提示符里面直接使用meke 指令,就可以自動化完成指定文件的 編譯。?

?注意:make 指令會自動推導對應的依賴關系,他的推導過程是一種棧式推導的;

一旦生成對應的第一個目標文件,此時就會停下來,其他 的對應目標文件不會生成,在默認的情

況下。也可以使用 make? + 指定的目標文件?

?3)相關問題

I) 為什么多次進行 make? ?的時候,顯示以下的提示信息:該目標文件已經是最新的

分析:其實每次在進行 make 指令進行編譯的時候,通過對比目標文件與源文件之間的“新舊” 時間,來決定是否再次執行make 指令。

II) 為什么會這樣進行執行???

為了提高編譯的效率。

一般情況下:首次進行編譯的時候,目標文件是新于 源文件的,因為先有源文件,才有了對應的

目標文件(注意:這里的目標文件不僅僅指的是,匯編生成的目標文件,也可能是可執行文件或者

是預編譯,編譯生成對應的目標文件)。

當我們沒有對源文件進行相應的修改,此時源文件是老于 目標文件的,假設當前make? 指令會再

次生效,當源文件的體積很大時候,在進行編譯的時候,會消耗大量的時間,所以為了提高編譯

的效率,當源文件老于 目標文件的時候,不會再次執行make? 指令。

本質:看源文件的內容是否發生變化,來決定是否再次進行make 指令的執行

4)對上面 的問題進行驗證

編譯器是如何知道當前的源文件的時間是 老于,還是新于 目標文件的呢???

首先需要知道幾個時間:

access:記錄對文件訪問的時間

modify: 記錄對文件內容的修改時間

change:記錄對文件的屬性修改時間

I) 查看一個文件的訪問,修改,時間:stat

此時目標文件是新于 源文件的,所以當我們再次執行 make? 的時候初出現以下的現象:

當我們對源文件進行修改的時候(對文件的內容或者是文件的屬性進行修改),所見現象如下:

5)偽目標: .PHONY 的使用

當我們想 每次使用 make 的時候,都強制執行文件的編譯,此時可以使用偽目標 .PHONY

對要生成的目標文件進行 .PHONY? 偽目標的修飾

?但是一般不建議這樣寫,因為對于目標文件要是每次 make? 的時候,都進行編譯,這樣不僅僅會消耗時間還極其銷毀內存。但是對于文件的清理,可以使用 偽目標進行修飾。

2) make clean :文件清理

使用:直接在命令提示符使用 make clean?

2. git?

1)git? 是什么

Git是一款免費、開源的分布式版本控制系統,用于敏捷高效地處理任何或小或大的項目。?

使用git 也可以進行團隊合作。

git? 的工作流程:

從遠程倉庫中克隆 Git 資源作為本地倉庫;

從本地倉庫中checkout代碼然后進行代碼修改;

提交本地倉庫前先將代碼提交到暫存區;

提交修改,提交到本地倉庫;本地倉庫中保存修改的各個歷史版本;

在需要和團隊成員共享代碼時,可以將修改代碼push到遠程倉庫。

2)git? 的使用

I) 首先我們需要先創建一個遠程倉庫,具體實現細節見下:

?II) 把遠程倉庫拉取下來:先復制遠程倉庫的地址,具體實現細節見下

III)在命令行提示里面輸入一下指令:

IIII) git? 三板斧

git? add + 指定的文件

git? commit? -m? "關鍵 的文字說明"

git? ?push??:注意在這一步,會進行身份驗證,輸入git? 的賬號以及對應的密碼即可

以上只是對git? 的簡單介紹,感興趣的鐵汁們,可以自行資料的搜集

3 . gdb 調試器的使用

1)引入

眾所周知,Linux 是一個非圖形化界面的操作系統(也支持圖形化界面),在上面可以使用命令行的方式進行文件的創建,代碼的編寫,軟件的下載…… 但是當我們的代碼在進行運行的時候難免會遇到一些Bug ,此時又是如何調試的???

我們知道對于VS? 下,進行代碼的調試,有相關的按鍵支持,對于Linux 系統上,也是可以的,只不過這里是命令行的方式。

首先我們需要先下載 gdb 這個調試器。

sudo yum install -y gdb

gdb 是一個開發環境必不可少的調試工具。

2) Debug 和 Release? 版本區別

當我們使用VS 進行代碼運行的時候,多數是在 Debug 版本下進行的,方面我們進行相關的調試

簡言之:Debug? 版本,進行程序的調試。

對于測試人員:當我們把寫好的項目進行終版的提交,他們會在 Release 版本下進行,主要

是發下各種問題,此時代碼里面是不包調試信息的,也就是用戶最終拿到的版本

3)Linux 下的gdb 相關的指令

I) 準備工作 :編一個測試代碼

makefile? 文件的內容:

gcc? 默認進行文件編譯采用的是版本是Debug ,當我們指定進行Debug 版本進行相關信息的調試 的

時候對應 的指令:對可執行程序進行編譯的 時候,添加 -g? :進行debug? 版本編譯

?2)對指定程序進行調試? gdb + 可執行程序(注意這里 必須是可執行程序的文件)

如何判斷當前的可執行程序到底是Debug? 版本下生成的還是 Release? 版本生成的???

?通過比較對應生成文件的大小:因為Debug? 版本生成的文件,對應體積較大,因為需要包含一些

對應 的調試信息。

注意:gcc/g++ 編譯生成對應的文件默認是以 release 版本發布的;想對知道程序進行調試 的時

候,必須借助 Debug? 版本生成的程序:在編譯的時候指定? -g?

當我們進入gdb 模式下,我們是無法知道當前代碼的內容,此時可以借助? l 指令進行相關內容查找

?l + n? :查看當前代碼指定的多少行,一般方便我們進行相關斷點設置

l 0? ?和 l? 1 打印出來的內容是一樣的

當我們有了相關的內容,接下來就是如何進行打斷點

b +指定的行號(源代碼對應的某一行)

有了斷點的設置,接下來就是如何查看已經打的斷點???

info b

直接輸入? info 的時候,默認是把所有的調試信息打印出來,如今我們只需要知道當前的 斷點信息直接? info b

斷點的刪除:

d + 要刪除斷點對應的編號? 對指定端點的刪除

d breakpoints :刪除所有 的斷點

假設當前需要刪除代碼第7行對應的斷點,此時就需要找到當前斷點對應的編號: 3

程序的運行與調試:

r :遇到斷點會停下來,相當于VS下的 F5?

逐過程 和逐語句的調試:

n :逐過程的調試,一般用于對函數的調試,相當于VS 下的 F10

s: 逐語句的調試,一個語句一個語句的調試,相當于VS 下的F11

當我們進入函數內部,發現這個執行的過程比較長,并且也不是出發報錯的位置,想直接

該函數運行完,返回調用該函數的位置:直接使用? finish? 指令即可

對變量的打印和追蹤:

p + 變量名 : 顯示變量的值

display + 變量名 : 每次運行完,都會打印一個當前變量對應的數值

對一個循環很長的代碼塊,此時一個一個指令的顯示比較麻煩,可以使用diaplsy 進行追蹤,此時

每執行一次循環,會自動打印變量的數值:

?當不需要對某個變量進行實時的跟蹤的時候,使用undislay? 進行設置。

?

以上是關于Linux 相關工具使用的簡單介紹,后期會不定期的進行內容法更新~~~

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

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

相關文章

沃豐科技智能客服在跨境電商獨立站中的核心角色

隨著全球化進程的加速和互聯網技術的不斷發展,跨境電商行業蓬勃興起,為消費者提供了更廣闊、更便捷的購物選擇。在這樣一個競爭激烈的市場環境中,優質的客戶服務成為了企業脫穎而出的關鍵。沃豐科技智能客服憑借其先進的技術和人性化的設計理…

uniapp 彈出軟鍵盤后打開二級頁面,解決其UI布局變動

軟鍵盤彈出,此時點擊某按鈕打開二級頁面,position:fixed 位于底部的按鈕不見了(通過加高其區域,發現被下移動了),什么原因不清楚? 但是發現是軟鍵盤彈出導致,問題解決通過隱藏鍵盤再打開二級頁…

Centos7下搭建Prometheus+Grafana監控

Prometheus 監控 Prometheus 監控系統的架構包括以下組件: Prometheus Server: Prometheus 服務器是監控系統的核心組件,負責收集、存儲和處理指標數據。它定期從各種數據源(如 Exporter、Agent 等)拉取指標數據&…

MyBatis-Plus(為簡化開發而生)

一、MyBatis-Plus概述 官網: baomidou.com MyBatis-Plus(簡稱 MP) 在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。 (1)單表操作 不需要編寫sql語句,封裝方法,…

深入解析 C++11 的 `std::atomic`:誤區、性能與實際應用

在現代 C 開發中,std::atomic 是處理多線程同步時的重要工具之一。它通過提供原子操作保證了線程安全,但在實際使用時卻隱藏著許多不為人知的陷阱和性能影響。本篇文章將帶你深入理解 std::atomic 的使用方式、潛在問題,以及如何正確應用于多…

芋道源碼,芋道sql,yudao,yudao-vue-pro拒絕割韭菜

芋道的開發指南實際上只需要小小的操作就可以觀看啦 為了避免被割韭菜 我們可以使用插件去進行解鎖文檔 項目地址 otomayss/free-yd (github.com)[這里是圖片002]https://github.com/otomayss/free-yd

Mac軟件推薦

Mac軟件推薦 截圖SnipasteXnipBob 快捷啟動Raycast 系統檢測Stats 解壓縮The UnarchiverKeka(付費) 視頻播放IINA 視頻下載Downie(付費) 屏幕劉海TopNotchMediaMate(付費)NotchDrop(付費&#x…

【ETCD】【源碼閱讀】 深入解析 raftNode.start`函數:Raft 核心啟動邏輯剖析

raftNode.start方法 是 etcd 中 Raft 模塊的核心啟動點,其職責是管理 Raft 狀態機的狀態變遷、日志處理及集群通信等邏輯。通過對源碼的逐行分析,我們將全面揭示其運行機制,探討其設計背后的分布式系統理念。 函數核心結構 raftNode.start 方…

車站值班員題庫

1. 聯系用手信號顯示十、五、三車距離信號中的“三車”(約33m)信號時,晝間的顯示方式為展開的綠色信號旗單臂平伸下壓 ( 一 )次。J442 2. 聯系用手信號顯示股道號碼時,晝間右臂向上直伸&#xff0c…

BI中場戰事:國外廠商退,國產廠商進

從沉睡的黃金到經濟的新寵,數據要素正上演華麗轉身。 近年來,數字經濟的長驅向前,離不開數據要素價值釋放所帶來的持續動力。作為第五大生產要素,數據要素的價值釋放需要從數據采集、傳輸到存儲、治理,再到分析和可視…

2024年華中杯數學建模C題基于光纖傳感器的平面曲線重建算法建模解題全過程文檔及程序

2024年華中杯數學建模 C題 基于光纖傳感器的平面曲線重建算法建模 原題再現 光纖傳感技術是伴隨著光纖及光通信技術發展起來的一種新型傳感器技術。它是以光波為傳感信號、光纖為傳輸載體來感知外界環境中的信號,其基本原理是當外界環境參數發生變化時&#xff0c…

【LeetCode每日一題】LeetCode 209.長度最小的子數組

LeetCode 209.長度最小的子數組 題目描述 給定一個正整數數組 nums 和一個正整數 target,找出連續子數組的最小長度,使得子數組的和大于或等于 target。如果不存在符合條件的子數組,返回 0。 Java 實現代碼 public class Solution {publi…

【openwrt】openwrt-21.02 基于IP地址使用ipset實現策略路由操作說明

openwrt版本信息 DISTRIB_ID=OpenWrt DISTRIB_RELEASE=21.02-SNAPSHOT DISTRIB_REVISION=r0-6bf6af1d5 DISTRIB_TARGET=mediatek/mt7981 DISTRIB_ARCH=aarch64_cortex-a53 DISTRIB_DESCRIPTION=OpenWrt 21.02-SNAPSHOT r0-6bf6af1d5 DISTRIB_TAINTS=no-all busybox override …

【H2O2|全棧】MySQL的基本操作(三)

目錄 前言 開篇語 準備工作 案例準備 多表查詢 笛卡爾積 等值連接 外連接 內連接 自連接 子查詢 存在和所有 含于 分頁查詢 建表語句 結束語 前言 開篇語 本篇繼續講解MySQL的一些基礎的操作——數據字段的查詢中的多表查詢和分頁查詢,與單表查詢…

從單體到微服務:如何借助 Spring Cloud 實現架構轉型

一、Spring Cloud簡介 Spring Cloud 是一套基于 Spring 框架的微服務架構解決方案,它提供了一系列的工具和組件,幫助開發者快速構建分布式系統,尤其是微服務架構。 Spring Cloud 提供了諸如服務發現、配置管理、負載均衡、斷路器、消息總線…

yarn : 無法加載文件 C:\Users\L\AppData\Roaming\npm\yarn.ps1,因為在此系統上禁

關于執行安裝yarn命令后執行yarn -v報錯: 先確認執行安裝yarn命令是否有誤 # 安裝yarn npm install yarn -g 終端輸入set-ExecutionPolicy RemoteSigned 當然如果yarn -v仍然執行失敗,考慮使用管理員方式運行IDEA, 注:如上操作…

centos 常見問題處理

免密登錄配置 # 在當前機器下 執行命令 生成 私鑰和公鑰 ~/.ssh 目錄下 ssh-keygen -t rsa # 執行如下命令 把公鑰 放到 對應機器上的 ~/.ssh/authorized_keys ssh-copy-id 172.17.68.220 # 如此 兩臺機器兩兩配置 centos ssh連接慢 vim /etc/ssh/sshd_config # UseD…

java全棧day12-后端Web實戰(IOC+DI)

前言:前面的基礎知識了解后進入實戰篇,從以下四個方面進行準備 一、開發規范 1.1前后端分離開發 前言回顧 二、Restful風格 引言:前端與后端在進行交互的時候,所使用的url風格叫Restful。 2.1概述 小結 2.2環境準備 2.2.1apif…

鏈式設計模式——裝飾模式和職責鏈模式

一、裝飾模式 1、概述 動態地給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。 ConcreteComponent :是定義了一個具體的對象,可以給這個對象添加一些職責;Decorator :裝飾抽象…

Cmake+基礎命令

一、版本要求&#xff1a; 檢查 cmake 版本號的最低要求&#xff0c;不滿足條件時報錯。 cmake_minimum_required(VERSION <version>)參數&#xff1a; version&#xff1a;最低要求的版本號 例子&#xff1a; # 最低要求安裝3.21版本的cmake cmake_minimum_required…