Linux修煉之路之自動化構建工具,進度條,gdb調試器

目錄

一:自動化構建工具make/makefile?

? ? ?生成內容:

? ? ?清理內容:

? ? ?對于多過程的:

? 對于多次make:

特殊符號:?

二:小程序之進度條?

三:git的簡單介紹?

四:Linux調試器gdb

接下來的日子會順順利利,萬事勝意,生活明朗-----------林辭憂

一:自動化構建工具make/makefile?

1.make是一個指令,makefile是當前目錄下的文件,兩個搭配使用完成項目的自動化構建

2.makefile的工作原理

? ? ?生成內容:

對于make在編譯的時候,會首先在當前目錄下查找對應的makefile文件,再在makefile文件當中根據依賴關系和依賴方法,執行依賴方法中的內容,編譯形成對應的目標文件(上面的例子中為test可執行文件)?

? ? ?清理內容:

這里就會發現,在清理時的指令為make clean,但在創建時只需要make就行,這是因為

make會自頂向下掃描makefile,把要形成的第一個目標文件充當make的默認動作,形成的第一個目標文件,所以誰在前,make就會先直接生成誰

所以對于其他的操作,make必須指定的去操作?

形式如: make 對應的目標文件?? ? 指定名稱地執行該依賴關系與匹配的依賴方法?

? ? ?對于多過程的:

會發現在執行時的和在makefile中的順序是不同的,這是因為

make在掃描makefile文件時,會優先根據依賴關系,查找依賴關系中所依賴的文件列表是否在當前目錄已經存在 ,如不存在,makefile會類似于遞歸式的去形成依賴文件,在依賴文件當中根據依賴關系和依賴方法形成對應的依賴文件,然后統一根據依賴文件形成目標文件,所以簡單地說就是make會自動推導makefile中的依賴關系,這是一種棧式的結構

? 對于多次make:

1.可以看出對于多次執行的操作是不允許的,這是因為這樣做的好處的是可以提高編譯效率,避免? ? ?重復的操作

2.但這是如何做到的 ,這就得引出下面的內容了

首先一定是源文件形成可執行文件,所以一般而言源文件的最近修改時間是老于可執行文件的最近修改時間;但如果我們修改了源文件,歷史上還有可執行文件的話,那么源文件的最近修改時間是一定要新于可執行文件的最近修改時間的

這樣的話,就只需要比較可執行文件的最近修改時間和源文件的最近修改時間,便能做到是否允許重新編譯

? ? ? 如果源文件的最近修改時間老于可執行文件的,不需要重新編譯

? ? ??如果源文件的最近修改時間新于可執行文件的,需要重新編譯

一般而言這兩個文件的最近修改時間是不會相同的

3.stat指令 查看源文件/可執行文件的時間

使用: stat 文件名

Access是最近訪問時間? ? ?

Modify是最近修改文件內容的時間(關鍵時間)? ? ?

Change是最近修改文件屬性的時間

修改三個時間

touch -a 已經存在的文件? 修改文件的Access時間

touch -m 已經存在的文件? 修改文件的Modify時間(修改的同時Change時間也會改變)?

chmod? 修改文件的Change時間(Modify時間不一定改變)

touch 文件名? 修改三個時間(如果文件已經存在,則修改時間,反之是創建文件的操作)

但特殊的對于Access時間不使用touch -a 的話,他的更新策略則是根據Modify和Change的更新次數,還有最近更新的文件被訪問的計數器統計的次數來決定是否更新

所以對于make是會根據源文件和目標文件的新舊,判定是否需要重新執行依賴關系進行編譯,因此依賴關系是不一定總被執行的,但如果想要依賴關系總是被執行,就需要添加.PHONY來修飾

特殊符號:?

二:小程序之進度條?

1.回車與換行

回車是\r,換行是\n兩者是不相同的,回車是回到行的開始處,換行則是到下一行

2.緩沖區

對于這段代碼在執行時,總是休眠兩秒后再打印出結果,那么在sleep的期間,"hello Linux"這段代碼是存放在哪的?但肯定的是一定是被保存起來了,這就存放在由c語言維護的一段內存空間,即緩沖區

如果代碼中有\n的話,就會立即刷新出來,沒有的話就只能等緩沖區滿或者代碼執行完結束,因為顯示器模式是行刷新

那么如果要在執行完printf后立即將結果刷新出來,可以使用fflush(stdout) 將結果強制刷新出來

這里可以實現一個倒計時

3.進度條的實現

?processbar.c

processbar.h

?

main.c

?

三:git的簡單介紹?

git是一個具有網絡功能的開源的版本控制器,集客戶端與服務端于一體

安裝git yum install git

將遠程倉庫克隆到本地? git clone 遠程倉庫的網址

git三板斧:(進入倉庫文件中進行操作)

?git add .? ?(將倉庫下沒有上傳的文件進行上傳)

git commit -m "日志"

git push +建立倉庫時的密碼

其他的注意:

.git 為本地倉庫(ls -al 查看)

git --version 查看版本

git log 查看日志

git status 查看提交狀態

四:Linux調試器gdb

1.在Linux默認編譯生成的可執行程序時release版本的,無調試信息,要想生成debug版本的話,在gcc編譯時加? ?-g選項? 生成debug 版本

可以用gdb 可執行程序? ? ? ? ? ?驗證默認生成的為debug/release 版本,也可以進入gdb開始調試

常用操作:

q? ?退出

r? 執行代碼

b 行號/文件名:行號/函數名/文件名:函數名? ? 對應位置設置斷點信息

info b? ?查看斷點信息

d 斷點的編號(NUM)? ? 刪除斷點

n? ?逐過程執行

s? ? 逐語句執行

l 數字/函數名? ? ?查看gdb代碼,默認顯示十行,可多次回車即可顯示全部(gdb會默認記錄上一條命令)

p 變量名? ?查看變量的值(相當于監視窗口)

display 變量? ?每次執行都打印變量的值(常顯示)

undisplay? 變量最左邊的編號? ? ?取消常顯示

until 指定行號? ? 程序跳轉執行到指定行

先s進入調用函數內部,再finish? ? ? ? ?執行完整個調用函數就停下來

c? ? 從斷點1執行到斷點2

disable 斷點編號? ? ? ?停用斷點

enable 斷點編號? ? ? ? ? 啟用斷點

set var 變量名=值? ? 修改變量的值

bt 查看調用堆棧

info locals? ?查看當前函數中的定義的局部變量

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

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

相關文章

fpga 提高有什么進階書推薦?

到FPGA中后期的時候就要開始接觸,如:高速接口、光纖數字信號處理等項目實踐了,那么我們可以讀一些書進行提升,大家可以收藏下。 高速接口項目《嵌入式高速串行總線技術:基于FPGA實現與應用》作者:張鋒 FPGA提升書籍推…

Go團隊:Go是什么

2024年的Google I/O大會[1]如期而至。 這屆大會的核心主旨毫無疑問是堅定不移的以AI為中心:Google先是發布了上下文長度將達到驚人的200萬token的Gemini 1.5 Pro[2],然后面對OpenAI GPT-4o的挑釁,谷歌在大會上直接甩出大殺器Project Astra[3]…

第七節 ConfigurationClassParser 源碼分析

tips: ConfigurationClassParser 是 Springframework 中的重要類。 本章主要是源碼理解,有難度和深度,也枯燥乏味,可以根據實際情況選擇閱讀。 位置:org.springframework.context.annotation.ConfigurationClassPars…

[LLM-Agents]淺析Agent工具使用框架:MM-ReAct

上文LLM-Agents]詳解Agent中工具使用Workflow提到MM-ReAct框架,通過結合ChatGPT 與視覺專家模型來解決復雜的視覺理解任務的框架。通過設計文本提示(prompt design),使得語言模型能夠接受、關聯和處理多模態信息,如圖像…

winform在一個類中調用窗體的控件和方法的兩個方式

第一: 在類中創建窗體對象的方式,通過對象調用控件或方法 eg: Form1 form1 new Form1(); form1.Button; //調用控件 form1.Method(); //調用方法 要注意,對應控件的Modifiers屬性要設置成public . 第二: 在窗體Form類下定義靜態變量(例如:form1)&…

Multi-Attention Transformer for Naturalistic Driving Action Recognition

標題:用于自然駕駛行為識別的多注意力Transformer 源文鏈接:https://openaccess.thecvf.com/content/CVPR2023W/AICity/papers/Dong_Multi-Attention_Transformer_for_Naturalistic_Driving_Action_Recognition_CVPRW_2023_paper.pdfhttps://openaccess…

linux創建私有docker倉庫以及推拉

創建私有倉庫: 1.下載 registry鏡像。 2.執行 registry 鏡像(#為注釋內容,\為換行): docker run -d \# --restartalways每次都是開機自動啟動--restartalways \# --name registry 表示容器名--name registry \# 表示…

java讀取shp文件,獲取點位

Testvoid contextLoads() {System.out.println(System.currentTimeMillis());//1716516228057 1716516228798String zipFilePath "C:\\code\\risk\\risk_management_backend\\edatope-app\\src\\main\\resources\\新中心范圍SHP導入模板.zip";String destDir &quo…

【Muduo】TcpServer類

TcpServer統領之前所有的類,是用戶直接使用的類。它通過ThreadPool管理所有的loopthread,保存所有的TcpConnection,保存用戶提供的各種回調函數并向TcpConnection的Channel中注冊回調。它負責監聽指定的端口,并接受來自客戶端的連…

ZeRO-3、模型并行、流水線并行適用情況

ZeRO-3 適用場景:參數量大但計算量相對均衡的情況。 主要特點: 參數分片:將模型參數、優化器狀態和梯度在多個 GPU 上進行分片。顯存優化:顯著減少每個 GPU 上的顯存占用,使得可以在較小的 GPU 上訓練更大的模型。 …

思科模擬器--06.單臂路由升級版--多端路由互連實驗--24.5.20

實驗圖紙如下: 第0步: 先放置六臺個人電腦,一臺交換機和一臺2911路由器(千兆路由器(G0開頭的)) 接著,用直通線將 PC0的F0,PC1的F0分別和交換機的F0/0, F0/1連接 交換機的F0/3和路由器的G0/0連接 PC2的F0,PC3的F0分別和交換機的F0/4, F0/5連接 交換機的F0/6和路由器的G0/1…

電腦連接愛快iKuai軟路由之后,網卡沒有正常獲取到IP,無法訪問愛快路由管理頁?

前言 上一次咱們說到在愛快控制臺上設置/辨認lan口,設置完成之后,其他的一些設置就需要在愛快iKuai軟路由的管理頁面上設置。 有些小伙伴會發現,當電腦連接上愛快軟路由的lan口之后,電腦并沒有正常獲取到ip,導致無法訪…

JavaScript表達式和運算符

表達式 表達式一般由常量、變量、運算符、子表達式構成。最簡單的表達式可以是一個簡單的值。常量或變量。例:var a10 運算符 運算符一般用符號來表示,也有些使用關鍵字表示。運算符由3中類型 1.一元運算符:一個運算符能夠結合一個操作數&…

【Arthas】阿里的線上jvm監控診斷工具的基本使用

關于對運行中的項目做java監測的需求下,Arthas則是一個很好的解決方案。 我們可以用來 1.監控cpu 現成、內存、堆棧 2.排查cpu飚高 造成原因 3.接口沒反應 是否死鎖 4.接口慢優化 5.代碼未按預期執行 是分支不對 還是沒提交? 6.線上低級錯誤 能不能不重啟…

STL--set和multiset集合

set和multiset會根據特定的排序準則&#xff0c;自動將元素排序。兩者不同之處在于multiset 允許元素重復而 set 不允許。如下圖: 使用set或multiset&#xff0c;必須先包含頭文件: #include <set>上述兩個類型都被定義為命名空間std內的class template: namespace std…

亞馬遜自養號測評:深入解析與搭建要求

在亞馬遜這電商平臺上&#xff0c;商品的評價對于賣家來說至關重要。為了提升商品的曝光率、排名、權重和銷量&#xff0c;賣家們紛紛采用各種推廣方式&#xff0c;其中&#xff0c;亞馬遜自養號測評成為了越來越多賣家選擇的一種有效方式。 亞馬遜自養號測評&#xff0c;顧名…

Android Retrofit 封裝模版

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 一、加上網絡訪問的權限二、引入依賴三、由API生成JavaBean四、封裝Retrofit五、調用 一、加上網絡訪問的權限 <uses-permission android:name"android.p…

分布式事務——9種解決方案的原理與分類

目錄 一、概要1. 分布式事務的概念2. 分布式事務解決方案分類 二、常見的分布式事務解決方案1. 基礎的 2PC&#xff08;二階段提交&#xff09;1.1 核心思想1.2 簡介1.3 主要特點1.3.1 優點1.3.2 缺點 2. 基礎的 3PC&#xff08;三階段提交&#xff09;2.1 核心思想2.2 簡介2.3…

C語言/數據結構——每日一題(有效的括號)

一.前言 如果想要使用C語言來解決這道題——有效的括號&#xff1a;https://leetcode.cn/problems/valid-parentheses/description/我們必須要借用上一篇我們所講的內容——棧的實現&#xff1a;https://blog.csdn.net/yiqingaa/article/details/138923750?spm1001.2014.3001.…

go routing 之 gorilla/mux

1. 背景 繼續學習 go 2. 關于 routing 的學習 上一篇 go 用的庫是&#xff1a;net/http &#xff0c;這次我們使用官方的庫 github.com/gorilla/mux 來實現 routing。 3. demo示例 package mainimport ("fmt""net/http""github.com/gorilla/mux&…