【Linux】make/Makefile 進度條小程序

目錄

一,認識 make/makefile

二,實例代碼

1,依賴關系

2,原理

3,項目清理

4,測試講解

三,Linux第一個小程序-進度條

game.h

game.c

test.c

程序詳解


?

一,認識 make/makefile

會不會寫makefile,從一個側面說明了一個人是否具備完成大型工程的能力

一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的 規則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進行更復雜的功能操作

makefile 帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟件開發的效率。

make是一個命令工具,是一個解釋makefile中指令的命令工具,一般來說,大多數的IDE都有這個命 令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可見,makefile都成為了一 種在工程方面的編譯方法。

make是一條命令,makefile是一個文件,兩個搭配使用,完成項目自動化構建。

二,實例代碼

一般我們形成可執行程序都是這樣的:

今天我們用make/makefile 來實施;

創建文件的名稱一定要是 makefile 第一個字母大小寫都可以;

像這樣直接輸入指令 make 可執行文件就會自動形成,非常的方便;

1,依賴關系

上面的文件 mybin,它依賴 game.o

game.o , 它依賴 game.s

game.s , 它依賴 game.i

game.i , 它依賴 game.c

2,原理

make是如何工作的,在默認的方式下,也就是我們只輸入make命令。那么

1,make 會在當前目錄下找名字叫 “Makefile” 或 “makefile” 的文件。

2,如果找到,它會找文件中的第一個目標文件(target),在上面的例子中,他會找到“mybin”這個文件, 并把這個文件作為最終的目標文件。

3,如果mybin文件不存在,或是mybin所依賴的后面的game.o文件的文件修改時間要比mybin這? 個文件新(可以用 touch 測試),那么他就會執行后面所定義的命令來生成mybin這個文件。

4,如果如果hello所依賴的game.o文件不存在,那么make會在當前文件中找目標為game.o文件的依賴性,如果找到則再根據那一個規則生成game.o文件。(這有點像一個堆棧的過程)所依賴的game.o文件不存在,那么make會在當前文件中找目標為game.o文件的依賴性,如果找到則再根據那一個規則生成game.o文件。(這有點像一個堆棧的過程)

5,當然,你的C文件和H文件是存在的啦,于是make會生成game.o 文件,然后再用 game.o 文件聲明 make的終極任務,也就是執行文件mybin了。

6,這就是整個make的依賴性,make會一層又一層地去找文件的依賴關系,直到最終編譯出第一個目標文件。

7,在找尋的過程中,如果出現錯誤,比如最后被依賴的文件找不到,那么make就會直接退出,并報錯, 而對于所定義的命令的錯誤,或是編譯不成功,make根本不理。

8,make只管文件的依賴性,即,如果在我找了依賴關系之后,冒號后面的文件還是不在,那么對不起, 我就不工作啦。

3,項目清理

工程是需要被清理的

像clean這種,沒有被第一個目標文件直接或間接關聯,那么它后面所定義的命令將不會被自動執行, 不過,我們可以顯示要make執行。即命令——“make clean”,以此來清除所有的目標文件,以便重編譯。

但是一般我們這種clean的目標文件,我們將它設置為偽目標,用 .PHONY 修飾,偽目標的特性是,總是被執行的。

可以將我們的 mybin 目標文件聲明成偽目標,測試一下。

4,測試講解

以上都是面向于基層的原理,字有點多適合深度研究,現在我們通俗一點;

mybin:game.c 是依賴關系,mybin 是game.c 形成的可執行文件,但是具體要怎么實現呢,這就要 依賴方法了,gcc game.c -o mybin ,就是依賴方法;

而且 gcc game.c -o mybin 也可以寫成 gcc -o $@? $^ ;

$@ 表示 mybin ,$^ 表示 game.c

也是一樣的效果,而且更加方便,建議使用后者;

.PHONY 是講文件修飾成 偽文件,偽文件的特性是總是被執行;

最好放在下面給 clean ,這樣程序就是總是被執行清理了;

當我們總是執行 make ,后面的就失效了,因為 mybin 的修改時間比 game.c 的修改時間慢;

上面紅線畫的就是 修改時間,mybin 比 game.c 慢所以 make 不會被執行;

我們修改一下 game.c 文件看看;

剛修改完,game.c 的時間比 mybin 慢;

所以可以運行 make ,再次打開的時候 mybin 文件的修改時間就比 game.c 長了,make 也就執行不了了;

我們也可以用 touch 來刷新文件的修改時間;

如果將我們的 mybin 目標文件聲明成偽目標,測試一下。

這樣make 每次都會被執行了,但是不推薦這樣使用,因為這本身就是對的,沒有修改就不要執行嘛,沒有毛病,現在我們的文件小每次執行都沒有關系,如果我們文件非常大的時候,每次都執行的話就非常消耗時間了;

clean 是用來清理文件的,用的話是make clean;

直接一鍵清理文件;

哦對了,還有一個就是我們使用的 make,他為什么就執行 mybin,而不執行 clean 呢?

指令make 是從上往下執行的;

將他們換個順序;

那我們執行 make 的時候就是執行 clean 了,執行 make mybin 的時候就是形成可執行文件 mybin 了,這個是從上往下的,順序不影響;

三,Linux第一個小程序-進度條

開始整硬活了兄弟們;

先把剛開始需要的文件準備好;

game.h

#include<stdio.h>
#include<time.h>
#include<unistd.h>void game(double rate);
void download();

game.c

#include"game.h"
#define MAX 1024*1024*1024char* buff = "|/-\\";
int i = 0;
char arr[102] = { 0 };
void game(double rate)
{if (rate <= 1.0){arr[0] = '=';}printf("[%-100s][%.1lf%%][%c]\r", arr, rate, buff[i % 4]);fflush(stdout);arr[(int)rate] = '=';if (rate< 99.0){arr[(int)rate+1] = '>';}i++;
}void download()
{srand(time(NULL)^1023);int max = MAX;int cnt = 0;double rate = 0;while (rate<100.0){cnt+= rand() % (1024*1024);rate = ((cnt*1.0)/max)* 100;if (rate > 100){rate = 100;}game(rate);usleep(50000);}
}

test.c

#include"game.h"int main()
{download();return 0;
}

程序詳解

這個程序是做了一個內存進度條,讓 MAX 為需要下載的內存大小,然后 cnt 為已經下載的部分,rate 為已經下載的百分比,然后傳給 game 函數進行進度條的運行,game 函數,根據 rete 的大小進行百分比輸出,等于號也是,還有翻轉的數組來判斷程序有沒有卡頓,之后再等于號后面加上 > 進行輸出點綴,直到 100% ,退出程序;

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

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

相關文章

教你如何將Web項目部署到Linux中

文章目錄 前言0. 什么是部署1. 調整代碼達成一致2. 數據庫建表3. 構建項目并打包4. 拷貝到 Tomcat 中5. 效果總結 前言 在我們完成了一個Web項目后, 我們該怎樣將項目部署到 Linux 系統中呢? 本文就來簡單講解一下. 文章已部署本人的博客系統代碼展開講解. 關注收藏, 開始學…

NeurIPS 2023 | RGIB:對抗雙邊圖噪聲的魯棒圖學習

? 摘要 鏈接預測[1,2]是圖學習的一種基礎任務&#xff0c;用于判斷圖中的兩個節點是否可能相連&#xff0c;被廣泛應用于藥物發現、知識圖譜補全和在線問答等實際場景。盡管圖神經網絡&#xff08;Graph Neural Network&#xff0c;GNN&#xff09;在該問題的性能上取得了顯著…

機器學習的概念和類型

1、人工智能、機器學習、深度學習之間的關系 人工智能&#xff08;AI&#xff09;是廣泛的概念&#xff0c;指賦予計算機智能特性。機器學習&#xff08;ML&#xff09;是AI的一個分支&#xff0c;是指通過計算機學習和改進性能。深度學習&#xff08;DL&#xff09;是ML的一類…

搭個網頁應用,讓ChatGPT幫我寫SQL

大家好&#xff0c;我是凌覽。 開門見山&#xff0c;我搭了一個網頁應用名字叫sql-translate。訪問鏈接掛在我的個人博客(https://linglan01.cn/about)導航欄&#xff0c;也可以訪問https://www.linglan01.cn/c/sql-translate/直達sql-translate。 它的主要功能有&#xff1a;…

第95步 深度學習圖像目標檢測:Faster R-CNN建模

基于WIN10的64位系統演示 一、寫在前面 本期開始&#xff0c;我們學習深度學習圖像目標檢測系列。 深度學習圖像目標檢測是計算機視覺領域的一個重要子領域&#xff0c;它的核心目標是利用深度學習模型來識別并定位圖像中的特定目標。這些目標可以是物體、人、動物或其他可識…

Docker Swarm總結(1/3)

目錄 1、swarm 理論基礎 1.1 簡介 1.2 節點架構 1.3 服務架構 1.4 服務部署模式 2、swarm 集群搭建 2.1 需求 ?2.2 克隆主機 2.3 啟動5個docker宿主機 2.4 查看 swarm 激活狀態 2.5 關閉防火墻 2.6 swarm 初始化 2.7 添加 worker 節點 2.8 添加 manager 節點 3、…

Mybatis-Plus3.0默認主鍵策略導致自動生成19位長度主鍵id的坑

碼字不易&#xff0c;如果對您有用&#xff0c;求各位看官點贊關注~ 原創/朱季謙 目前的Mybatis-Plus版本是3.0&#xff0c;至于最新版本是否已經沒有這個問題&#xff0c;后續再考慮研究。 某天檢查一位離職同事寫的代碼&#xff0c;發現其對應表雖然設置了AUTO_INCREMENT自…

7.1 Windows驅動開發:內核監控進程與線程回調

在前面的文章中LyShark一直在重復的實現對系統底層模塊的枚舉&#xff0c;今天我們將展開一個新的話題&#xff0c;內核監控&#xff0c;我們以監控進程線程創建為例&#xff0c;在Win10系統中監控進程與線程可以使用微軟提供給我們的兩個新函數來實現&#xff0c;此類函數的原…

H3C路由器基本配置命令

1、system-view 進入系統視圖 2、sysname R1 配置路由器名字為R1 3、display clock 查看當前系統時間 4、clock datetime 00:00:00 2/26/2023 用戶模式下修改系統時間 配置控制臺密碼 Console&#xff1a; 1、user-interface aux0 在系統模式下進入圖接口 2、authentication-mo…

2023亞太賽c題完整思路數據 數學建模亞太

Question 1: Analyze the main factors that affect the development of new energy electric vehicles in China, establish a mathematical model, and describe the impact of these factors on the development of new energy electric vehicles in China. 問題1:分析影響…

office 365企業版安裝教程

1.下載所需工具&#xff08;防火墻和防毒軟件記得關閉&#xff09; 下載鏈接&#xff1a;所需文件 2.安裝激活office 1.安裝 office tool plus 2.已安裝過office 先進行office的移除&#xff0c;再進行未安裝office的步驟進行 3.未安裝過office 1.設置部署 按照以下來進行安…

Linux命令(130)之hwclock

linux命令之hwclock 1.hwclock介紹 linux命令hwclock是用來顯示硬件時鐘 2.hwclock用法 hwclock [參數] hwclock參數 參數說明-s讓系統時間同步硬件時間-w讓硬件時間同步系統時間 3.實例 3.1.同步服務器時鐘時間 命令&#xff1a; ntpdate pool.ntp.org [rootrhel77 ~…

【vin 國標正則校驗】

規則一 var checkVINfunction(VIN){if(typeof(VIN)!string) return false;if(VIN.length!17) return false;VINVIN.toUpperCase();RE/^[A-HJ-NPR-Z\d]{8}[X\d][A-HJ-NPR-Z\d]{3}\d{5}$/if(!RE.test(VIN)) return false;let cOT{0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:1,B…

360:流氓or保家衛國的勇士?

你曾用過360嗎&#xff0c;這個在國內名聲不好的殺毒軟件&#xff0c;卻是令國外黑客聞風喪膽的存在。 首先&#xff0c;在電腦病毒剛興起的年代&#xff0c;殺毒軟件是要收費的&#xff0c;當時盛行的瑞星和金山就是采用的付費模式&#xff0c;而就在2006年&#xff0c;奇虎…

C/C++通過位操作實現2個uint32_t合并為uint64_t

#include <iostream> using namespace std;int main() {uint32_t a 10;uint32_t b 600;//先將uint32_t的a轉為uint64_t&#xff0c;此時a前面32位都是0&#xff0c;然后左移32位&#xff0c;此時右32位為0&#xff0c;最后加上uint32_t類型的b&#xff0c;填充右32位的…

解決Activiti5.22流程圖部署在Windows上正常,但在linux上部署后出現中文變方塊的問題

總結/朱季謙 樓主最近在做公司的工作流平臺&#xff0c;發現一個很無語的事情&#xff0c;Activiti5.22的流程圖在Windows環境上部署&#xff0c;是可以正常查看的&#xff0c;但發布到公司的Linux服務器上后&#xff0c;在上面進行流程圖在線部署時&#xff0c;發現中文都變成…

2023亞太杯數學建模C題思路代碼 - 我國新能源電動汽車的發展趨勢

1 賽題 問題C 我國新能源電動汽車的發展趨勢 新能源汽車是指以先進技術原理、新技術、新結構的非常規汽車燃料為動力來源( 非常規汽車燃料指汽油、柴油以外的燃料&#xff09;&#xff0c;將先進技術進行汽車動力控制和驅動相結 合的汽車。新能源汽車主要包括四種類型&#x…

一套開源、強大且美觀的WPF UI控件庫 - HandyControl

前言 今天給大家推薦一套開源、強大且美觀的WPF UI控件庫&#xff1a;HandyControl。 WPF介紹 WPF 是一個強大的桌面應用程序框架&#xff0c;用于構建具有豐富用戶界面的 Windows 應用。它提供了靈活的布局、數據綁定、樣式和模板、動畫效果等功能&#xff0c;讓開發者可以創…

關于Redis底層的兩個問題

1. 為什么Redis不共享包含字符串的對象&#xff1f; 當服務器考慮將一個共享對象設置為鍵的值對象時&#xff0c;程序首先需要檢查給定的共享對象和鍵想要創建的目標對象是否完全相同&#xff0c;只有在共享對象和目標對象完全相同的情況下&#xff0c;程序才會將共享對象用作…

SOEM主站開發篇(3):為APP程序添加命令

0 工具準備 1.SOEM-1.4.0源碼(官網:http://openethercatsociety.github.io/) 2.Linux開發板(本文為正點原子I.MX6U ALPHA開發板) 3.交叉編譯工具(arm-linux-gnueabihf-gcc) 4.cmake(版本不得低于3.9,本文為3.9.2) 5.Ubuntu 16.04(用于編譯生成Linux開發板的可執行文…