linux -c程序開發

目的是在linux中創建可執行的c語言程序的步驟 和gcc,make和git的簡單運用

建立可執行程序的步驟:


-1:預處理:

--:頭文件展開;--去掉注釋;--宏替換;--條件編譯

-2:編譯

--:將預處理之后的c語言替換為匯編語言帶阿米

--:語法分析,語義分析,代碼生成

--:檢查語法正確性并且優化代碼

-3:匯編:

--:將匯編代碼轉化為機器碼

--:生成二進制文件,包含機器碼和輔助信息

-4:鏈接

--:將多個目標文件和庫文件合并為一個可執行文件

--:解析符號表,處理外部引用

使用gcc編譯c語言程序:

GNU C編譯器,是linux通用c語言編譯器

語法格式: gcc [-選項] 文件

沒有選項直接生成可執行文件

常用的選項:

E 只是預處理源文件,不編譯

S 編譯到匯編,生產匯編代碼文件

c 編譯到目標文件階段,但是不鏈接(二進制文件,可以使用 objdump反匯編查看匯編代碼)

o 根據編譯階段指定的輸出到文件名

項目編譯工具:make

為了解決:源代碼關系維護苦難(把代碼維護命令和編譯命令卸載makefile中,利用make工具去解析文件自動執行相關的命令),減少重復編譯時間(只對改動后的文件重新編譯,重新鏈接后,可以快速看到效果)

makefile文件:這個是mkae依賴文件

特殊文本文件,包含指令和信息,詳細描述了項目結果,文件間關系,編譯參數設置,等待makefile編寫完成,就可以實現大型項目的編譯鏈接,清理工作

make的原理:解析makefile文件,根據目標及其依賴關系,構建依賴圖,并自動執行相應的構建命令

makefile文件有若干規則,目標,依賴和命令

目標是:要產生的文件名稱和動作名稱

依賴文件是:用于產生目標文件的輸入文件

命令是:make執行的動作,多個命令時一個占一行

make的語法規則:
make [-f 文件] [目標]

運行命令的時候,默認找:GNUmakefile /makefile / Makefile /當然也可以 -f指定

目標,如果沒有指定目標就會構建第一個目標然后退出,如果有多個,就會按順序去構建目標及其依賴關系

實例:編譯軟件 hello

在makefile中,如下定義

hello: hello.c

gcc -o hello hello.c

說明了hello 依賴:hello.c,hello通過gcc -o hello hello.c得來

實例2:

要編譯cal軟件,那么我們的makefile如下

cal 依賴與cal.o,mul.o,div.o

通過命令 gcc cal.o mul.o div.o -o cal 生成

下面的解釋同上

最后的clean目標是偽目標,不依賴與任何文件

rm *.o是.o后綴文件

第一次的make會全部編譯一次

但是如果第二次進行make,因為沒有改變就不會有任何提示信息

如果我們通過touch,修改了創建時間,那么就會只編譯修改部分

使用 make clean就可以刪除所有的.o文件

Git

用于高效的處理各種規模的項目版本管理任務,開發者通過git命令來執行項目版本管理和各項操作

1,工作目錄,在電腦中的目錄,用于項目開發,進行文件編輯,添加和刪除

2,暫存區,在本地倉庫和工作目錄之間的,允許用戶在提交前進行組織,檢查

3,本地倉庫負責存儲用戶的所有提交,分支,標簽,版本控制的核心,使得用戶可以回顧歷史版本,修改,創建,切換分支,或者添加標簽

4,遠程倉庫,托管在平臺or服務器上面的軟件庫,包含了源代碼,歷史記錄,分支信息,配置文件,可以推送本地倉庫修改,拉去倉庫最新版本等

常見命令

git clone [遠程倉庫的鏈接]

git add [文件/目錄]//將文件加入到暫存區

git commit -m "說明信息"//將暫存區的內容提交

git push [遠程倉庫] [本地分支]//把本地分支提交到遠程目錄

git pull [遠程倉庫] [分支] //拉取遠程倉庫的分支

git branch //列出所有本地分支

git branch name //創建一個分支

git checkuot 分支名 //切換到對應的分支

git branch -d [分支] //刪除分支

git status //倉庫的狀態

git log //git的提交記錄

git config //查看和修改git配置

當然更多的你可以去Learn Git Branching學習更多

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

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

相關文章

Netty 是一個基于 Java NIO 的高性能網絡通信框架

Netty 是一個基于 Java NIO 的高性能網絡通信框架,廣泛應用于構建分布式系統、RPC 框架、即時通信系統等場景。它的核心設計目標是 異步、非阻塞、高可擴展性,其底層原理涉及 事件驅動模型、線程模型、內存管理 等關鍵技術。以下是 Netty 的核心原理和架…

UI 庫 Ant Design 中的 Table 表格和分頁器:快速實現數據展示和分頁功能

🤍 前端開發工程師、技術日更博主、已過CET6 🍨 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 🕠 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 🍚 藍橋云課簽約作者、…

Java實現堆排序算法

1. 堆排序原理圖解 堆排序是一種基于二叉堆(通常使用最大堆)的排序算法。其核心思想是利用堆的性質(父節點的值大于或等于子節點的值)來高效地進行排序。堆排序分為兩個主要階段:建堆和排序。 堆排序步驟: …

【Hive入門】Hive安全管理與權限控制:審計日志全解析,構建完善的操作追蹤體系

目錄 引言 1 Hive審計日志概述 1.1 審計日志的核心價值 1.2 Hive審計日志類型 2 HiveServer2操作日志配置 2.1 基礎配置方案 2.2 日志格式解析 2.3 日志輪轉配置 3 Metastore審計配置 3.1 Metastore審計啟用 3.2 審計事件類型 4 高級審計方案 4.1 與Apache Ranger…

力扣-hot100 (缺失的第一個正數)

41. 缺失的第一個正數 困難 給你一個未排序的整數數組 nums ,請你找出其中沒有出現的最小的正整數。 請你實現時間復雜度為 O(n) 并且只使用常數級別額外空間的解決方案。 示例 1: 輸入:nums [1,2,0] 輸出:3 解釋&#xff…

13前端項目----購物車修改

購物車修改 uuid臨時游客身份購物車部分功能全選修改商品數量修改商品勾選狀態刪除產品 uuid臨時游客身份 請求數據倉庫發起請求 ->問題:獲取不到購物車數據? 所以需要一個身份,告訴服務器是誰存的數據?是要獲取誰的數據&…

Mac電腦,idea突然文件都展示成了文本格式,導致ts,tsx文件都不能正常加載或提示異常,解決方案詳細說明如下

有一天使用clean my mac軟件清理電腦 突然發現idea出現了文件都以文本格式展示,如圖所示 然后就卸載,計劃重新安裝,安裝了好幾個版本,并且setting->file types怎么設置都展示不對,考慮是否idea沒卸載干凈&#xff…

Nginx搭建test服務器

創建test域名 進入阿里云添加解析 創建域名:test.xxxxx.com 服務器復制項目代碼 新建目錄,Git拉取項目代碼,安裝上插件包 修改配置文件,啟動測試服務 修改配置文件“服務器接口” 開啟服務pm2 start app.js --name "test" 表格含義: 列名含義說明id進程在…

MyBatis-Plus 非 Spring 環境使用時 `GenericTypeResolver` 缺失問題總結

MyBatis-Plus 非 Spring 環境使用時 GenericTypeResolver 缺失問題總結 問題描述 在非 Spring 環境中使用 MyBatis-Plus 3.4.3.1 及以上版本時,啟動程序會拋出以下錯誤: Exception in thread "main" java.lang.NoClassDefFoundError: org/s…

綜合案例:使用vuex對購物車的商品數量和價格等公共數據進行狀態管理

文章目錄 0.實現需求1.新建購物車模塊cart2.使用json-server模擬向后端請求數據3.在vuex請求獲取并存入數據,并映射到組件中,在組件中渲染【重點】3.1.安裝axios3.2.準備actions和mutations,獲取和存入數據到vuex中3.3.動態渲染:先用mapState映射list到組件頁面 4.點擊修改數量…

《數據結構初階》【順序表 + 單鏈表 + 雙向鏈表】

《數據結構初階》【順序表 單鏈表 順序表】 前言:先聊些其他的東西!!!什么是線性表?什么是順序表?順序表的種類有哪些? 什么是鏈表?鏈表的種類有哪些? ---------------…

Android Retrofit框架分析(三):自動切換回主線程;bulid的過程;create方法+ServiceMethod源碼了解

目錄 Okhttp有什么不好?bulid的過程create方法ServiceMethodcall enqueue的過程為什么要學習源碼呢? 一、Okhttp有什么不好? Okhttp本身來說,是一個挺好的網絡框架,但,對于開發者而言,使用起…

C++ STL 基礎與多線程安全性說明文檔

C STL 基礎與多線程安全性說明文檔 一、STL 簡介 STL(Standard Template Library,標準模板庫)是 C 標準庫的重要組成部分,提供了常用的數據結構和算法的泛型實現,極大地提高了代碼的復用性和開發效率。 STL 的六大組…

數據結構之圖的分類和存儲

圖 圖(Graph)G由兩個集合V和E組成,記為:G(V,E),其中V是頂點的有窮非空集合(其實就是頂點),E是V 中頂點偶對的有窮集合(就是邊)。V(G)和E(G)通常分別表示圖G的頂點集合以及邊集合,E(G)可以為空集合,但是此時…

擴增子分析|微生物生態網絡穩定性評估之魯棒性(Robustness)和易損性(Vulnerability)在R中實現

一、引言 周集中老師團隊于2021年在Nature climate change發表的文章,闡述了網絡穩定性評估的原理算法,并提供了完整的代碼。自此對微生物生態網絡的評估具有更全面的指標,自此網絡穩定性的評估廣受大家歡迎。本系列將介紹網絡穩定性之魯棒性…

setup 函數在 Vue 3 中的作用是什么?什么時候會執行

文章目錄 前言? 一、setup() 函數的作用是什么&#xff1f;? 二、setup() 什么時候執行&#xff1f;? 三、setup() 的參數? 四、setup() 中不能做什么&#xff1f;? 五、常見用法示例? 六、總結&#xff08;適合背誦或面試回答&#xff09; <script setup> 是 **Vu…

JDBC實現--保姆級教程~

本來以為寫過一個使用python與數據庫連接的文章&#xff0c;但是今天突然發現沒有&#xff0c;那就直接寫Java與數據庫連接的吧。當然如果大家有需要可以告訴我&#xff0c;有時間的話也可以寫一個的pymysql的使用的。 數據庫有很多種&#xff0c;接下來我就以MySQL為例來進行講…

Ubuntu18.04搭建samda服務器

一.什么是Samba服務器&#xff1f; Samba服務器是一種基于開源協議實現的網絡共享服務軟件&#xff0c;主要用于在不同操作系統&#xff08;如Windows、Linux、Unix&#xff09;之間實現文件和打印機共享功能。其核心目標是解決跨平臺資源共享的兼容性問題&#xff0c;尤其是在…

《分詞算法大揭秘:BPE、BBPE、WordPiece、ULM常見方法介紹》

分詞算法是自然語言處理&#xff08;NLP&#xff09;中的一個重要預處理步驟&#xff0c;它將文本分割成更小的單元&#xff08;如單詞、子詞或字符&#xff09;。以下是幾種常見的分詞算法&#xff1a;Byte Pair Encoding (BPE)、Byte-level BPE (BBPE)、WordPiece 和 Unigram…

WordPress01 - 后臺常用功能

最近些日子研究Wordpress&#xff0c;做些簡單的筆記。 怎么安裝Wordpress&#xff0c;怎么進的后臺&#xff0c;這些咱就不嘮了哈&#xff0c;網上到處是教程。 目錄 1&#xff0c;Wordpress的后臺 1-1&#xff0c; Posts(投稿) 1-2&#xff0c;Media(媒體) 1-3&#xf…