亚洲国产第一_开心网五月色综合亚洲_日本一级特黄特色大片免费观看_久久久久久久久久免观看

Hello! 歡迎來到小浪云!


【Linux】Linux開發(fā)六大必備工具之安裝、自動化構建、調試工具


avatar
小浪云 2025-04-17 28

四、安裝工具yum

Linux系統(tǒng)中安裝軟件,以前需要下載源代碼并編譯成可執(zhí)行文件,但這過于繁瑣。后來,常用軟件被預先編譯成軟件包,存儲在服務器上,通過包管理器(類似手機應用商店)可以輕松找到并安裝這些軟件包。yum是Linux中常用的包管理器之一。

我們可以通過命令查看當前使用的yum源。在圖中可以看到,我們使用的是華為源,因為這里使用的是華為云服務器

【Linux】Linux開發(fā)六大必備工具之安裝、自動化構建、調試工具 如果使用的是虛擬機進行開發(fā),yum源可能會有些過時,我們可以更換yum源。只需將centos-Base.repo文件替換為新的yum源文件即可。實際上,這是在更改yum源的網址,但我們不建議手動修改網址,而是直接用現成的文件替換。

如果主機上沒有yum,可以通過以下命令下載這個“應用商店”。

五、自動化構建工具–makefile

1、makefile的使用

首先,在目錄下創(chuàng)建一個makefile文件。

【Linux】Linux開發(fā)六大必備工具之安裝、自動化構建、調試工具 然后使用vim打開文件,首先列出依賴關系,如圖所示,test依賴于test.o,意味著test的生成需要test.o,test.o依賴于test.s,test.s依賴于test.i,test.i依賴于test.c,clean不依賴任何文件。接著,在依賴關系的下一行用tab鍵縮進,寫明生成所需的命令。

【Linux】Linux開發(fā)六大必備工具之安裝、自動化構建、調試工具 完成makefile文件后,直接輸入make命令即可實現文件中的一鍵構建。

【Linux】Linux開發(fā)六大必備工具之安裝、自動化構建、調試工具 使用make clean命令可以清理以.iso為后綴的文件。

【Linux】Linux開發(fā)六大必備工具之安裝、自動化構建、調試工具

2、makefile的原理

(1)makefile生成可執(zhí)行程序

以剛才的例子為例,當輸入make命令時,make會在當前目錄下尋找makefile/Makefile文件(大小寫不敏感,功能相同)。找到后,它會將第一個目標文件test作為最終目標。test依賴于test.o,如果test.o不存在,make會繼續(xù)查找test.o的依賴test.s,以此類推,直到找到test.c,然后逐步生成.i、.s、.o文件,最終編譯出目標文件test。如果編譯過程中遇到錯誤,make會立即退出并報錯。

如果不需要中間文件,可以簡化如下圖所示。

【Linux】Linux開發(fā)六大必備工具之安裝、自動化構建、調試工具

(2)清理makefile相關文件

在構建項目時,需要清理工程文件,clean命令用于此目的。它不依賴任何文件,因此后面沒有其他內容,命令為rm。通過make clean來清理工程文件。

(3)makefile文件機制

我們發(fā)現,執(zhí)行clean需要使用make clean,而執(zhí)行test只需make即可。輸入make test與make的效果相同。因此,make默認執(zhí)行構建目標文件的操作,但也可以指定目標文件如make test,效果相同。除目標文件外,其他類似clean的操作需要通過make clean來執(zhí)行。

make還具有保護機制,禁止在修改文件之前多次編譯。make只會在源文件的時間戳比目標文件的時間戳新時才重新編譯。時間戳的比較是通過將時間轉化為時間戳進行的。

【Linux】Linux開發(fā)六大必備工具之安裝、自動化構建、調試工具

(4)偽目標

如果想要多次編譯,可以使用偽目標機制。它可以使選定的操作始終可執(zhí)行,只需在相應行前加上.PHYONY:源文件。

【Linux】Linux開發(fā)六大必備工具之安裝、自動化構建、調試工具【Linux】Linux開發(fā)六大必備工具之安裝、自動化構建、調試工具 但我們通常會使用這個保護機制,因為它能防止不必要的資源浪費。因此,在編寫makefile時,通常將.PHYONY添加到make clean之前。

【Linux】Linux開發(fā)六大必備工具之安裝、自動化構建、調試工具 原因如下:

第一,避免與文件沖突。通常,make clean用于刪除構建過程中生成的文件,如.o目標文件、可執(zhí)行文件和其他臨時文件。其目的是將項目恢復到干凈狀態(tài)。如果clean不是偽目標,而項目中存在名為clean的文件,make會根據文件的時間戳判斷是否執(zhí)行該目標的命令。如果clean文件比其依賴文件更新,make會認為該目標是最新的,從而不會執(zhí)行make clean命令,這違背了make clean的初衷。

第二,明確執(zhí)行操作的意圖。將clean定義為偽目標,明確告訴make工具,clean是一個不對應任何文件的目標,make應該始終執(zhí)行其命令,而不考慮文件的存在和時間戳。

第三,保持makefile的一致性和可維護性。使用偽目標可以使makefile的行為更加可預測。對于像clean這樣的目標,我們希望它執(zhí)行一個操作而不是構建一個文件,將其定義為偽目標符合其操作的性質,使makefile的邏輯更加清晰。

(5)符號代替

【Linux】Linux開發(fā)六大必備工具之安裝、自動化構建、調試工具【Linux】Linux開發(fā)六大必備工具之安裝、自動化構建、調試工具 上述兩段代碼意義相同。

符號 意義
$@ 表示規(guī)則中的目標文件
$^ 表示規(guī)則中的所有依賴文件
$ 表示規(guī)則中的第一個依賴文件

六、調試工具–gdb

1、背景

在學習c語言時,如果不是在學校學習,通常會使用VS或vscode作為第一個編譯器。以VS為例,學習過程中會學習調試功能。調試的前提是程序以debug方式發(fā)布。

【Linux】Linux開發(fā)六大必備工具之安裝、自動化構建、調試工具 程序有兩種發(fā)布方式:debug和release。通過gcc和g++編譯的程序默認是release版本。如果需要調試,就需要debug版本,在源代碼生成二進制程序時添加-g選項。在Linux中,調試工具是gdb。

2、使用

創(chuàng)建一個簡單的加法程序示例,用于學習C語言調試。

【Linux】Linux開發(fā)六大必備工具之安裝、自動化構建、調試工具 test是以debug版本發(fā)布的,test_r是以release版本發(fā)布的,可以明顯看出debug版本的test文件更大。

【Linux】Linux開發(fā)六大必備工具之安裝、自動化構建、調試工具 通過命令開始進入調試。

命令 縮寫 描述
break b 在程序的指定行號處設置斷點
break b 在指定的函數入口處設置斷點
info breakpoints i b 顯示當前設置的所有斷點信息
run r 開始運行程序,如果程序需要命令行參數可在其后添加
next n 執(zhí)行下一行代碼,但不進入函數內部,函數調用會直接執(zhí)行完
step s 執(zhí)行下一行代碼,若為函數調用則進入函數內部
print p 打印變量的值
display 跟蹤顯示,每次程序暫停時都顯示該表達式的值
undisplay 取消跟蹤
backtrace bt 顯示當前的調用信息
continue c 從當前位置繼續(xù)執(zhí)行程序,直到下一個斷點或程序結束
clear cl 清除指定行號的斷點
delete d 刪除指定編號的斷點
quit q 退出 GDB 調試會話
break if b if 在滿足特定條件時觸發(fā)斷點
watch 當表達式的值發(fā)生變化時,程序會暫停
info threads 顯示所有線程的信息
Thread 切換到指定的線程進行調試
list l 列出以行號為中心的上下共10行代碼
list l 列出某個函數的源代碼
finish 執(zhí)行到當前函數返回,然后停下來等待命令

gdb和VS的對應表格如上所示,對應效果與VS相同。

大家盡量養(yǎng)成使用調試工具的習慣,這樣找bug會更規(guī)范,不會遇到痛苦的地方。

今日分享就到這里了。

相關閱讀