Linux探秘坊-------3.開發工具詳解(2)

1.動靜態庫和動靜態鏈接(操作)

  • 靜態庫是指編譯鏈接時,把庫?件的代碼全部加?到可執??件中,因此?成的?件 ?較?,但在運?時也就不再需要庫?件了。其后綴名?般為“.a”

  • 在這里插入圖片描述

  • 動態庫與之相反,在編譯鏈接時并 沒有把庫?件的代碼加?到可執??件中 ,?是在程序執?時由運?時鏈接?件加載庫,這樣可以節省系統的開銷。動態庫?般后綴名為“.so”

  • 在這里插入圖片描述

靜態鏈接操作:gcc code.o -o mycode -static
在這里插入圖片描述

動態鏈接操作:gcc code.o -o mycode

在這里插入圖片描述

2.自動化構建make/makefile

1.初識makefile

  • makefile帶來的好處就是??“?動化編譯”,?旦寫好,只需要?個make命令,整個?程完全
    ?動編譯
    ,極?的提?了軟件開發的效率。
  • make是?個命令?具,是?個解釋makefile中指令的命令?具,?般來說,?多數的IDE都有這
    個命令,?如:Delphi的make,VisualC++的nmake,Linux下GNU的make。可?,makefile
    都成為了?種在?程??的編譯?法。
  • make是?條命令makefile是?個?件,兩個搭配使?,完成項??動化構建。

淺淺嘗試一下:
1.

在這里插入圖片描述
先創建一個code.c并用vim進行編寫,再新建一個makefile

在這里插入圖片描述
用vim打開makefile,并寫入以上內容,

  • 前為要生成的可執行程序的名字,后為源文件(第一行為 依賴關系
  • gcc code.c -o code (第二行為 依賴方式

在這里插入圖片描述

make指令完成編譯。

在這里插入圖片描述
運行也成功

2.具體語法

1.清理代碼文件

如果代碼文件我不想要了,那怎么清理呢?
在這里插入圖片描述
先vim打開makefile,寫入紅框的內容

  • 第一行表示 clean不依賴于任何文件
  • 第二行為依賴方式

在這里插入圖片描述
執行make clean,發現code(可執行文件)已經被刪除

在這里插入圖片描述

2.依賴關系的推導

在這里插入圖片描述
test.c存在,推導結束

在這里插入圖片描述

3.完整的makefile語法
1.類似宏替換的操作

在這里插入圖片描述

之前我們在makefile里都是直接寫文件名的,這里使用 類似宏替換 的方式替換命令和文件,記住,在使用替換時要加上$()

2.多文件統一編譯為可執行文件

假如我們的文件非常多,那么上述類似宏替換的方法就不行了,舉例:
在這里插入圖片描述
模擬100個文件的情況

在這里插入圖片描述

我們來依次解釋:

在這里插入圖片描述
這句話表示,SRC拿到了當前目錄里 所有以.c結尾的文件

在這里插入圖片描述
這行表示OBJ是由SRC中 所有.c變為.o得來的

在這里插入圖片描述

這里的^是指依賴關系中:后的內容@是指:前的內容

在這里插入圖片描述
這里%是通配符,:左邊匹配所有.c結尾的文件,<表示將展開的所有.c文件,一個接一個地匹配命令,形成.o文件

在這里插入圖片描述
每一行最前面的@是指在外面使用make指令時 不顯示過程,直接給出結果(可不加)

在這里插入圖片描述
我們也可以 自我定制執行某一步驟后,想要輸出的提示內容

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

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

相關文章

電腦開機出現Bitlock怎么辦

目錄 1.前言 2.產生原因&#xff1a; 1.系統異常關機 2.系統更新錯誤 3.硬件更換 4.CMOS電池問題 5.出廠設置 6.意外情況 3.解鎖步驟&#xff1a; 3.1&#xff1a;記住密鑰ID&#xff08;前6位&#xff09; 3.2&#xff1a;打開aka.ms/myrecoverykey網址 3.3&#…

C# 的 NLog 庫高級進階

一、引言 在 C# 開發的廣袤天地中&#xff0c;日志記錄宛如開發者的 “千里眼” 與 “順風耳”&#xff0c;助力我們洞察應用程序的運行狀態&#xff0c;快速定位并解決問題。而 NLog 庫&#xff0c;無疑是日志記錄領域中的璀璨明星&#xff0c;以其強大的功能、靈活的配置和出…

Avalonia系列文章之小試牛刀

最近有朋友反饋&#xff0c;能否分享一下Avalonia相關的文章&#xff0c;于是就抽空學習了一下&#xff0c;發現Avalonia真的是一款非常不錯的UI框架&#xff0c;值得花時間認真學習一下&#xff0c;于是邊學習邊記錄&#xff0c;整理成文&#xff0c;分享給大家&#xff0c;希…

10 為什么系統需要引入分布式、微服務架構

java技術的發展 在java開始流行起來之后&#xff0c;主要服務于企業家應用&#xff0c;例如ERP,CRM等等&#xff0c;這些項目是為企業內部員工使用&#xff0c;我們的思維是怎么用設計模式&#xff0c;如何封裝代碼。讓開發人員關注到業務上去&#xff0c;系統也就那么幾十幾百…

第6章:Python TDD實例變量私有化探索

寫在前面 這本書是我們老板推薦過的&#xff0c;我在《價值心法》的推薦書單里也看到了它。用了一段時間 Cursor 軟件后&#xff0c;我突然思考&#xff0c;對于測試開發工程師來說&#xff0c;什么才更有價值呢&#xff1f;如何讓 AI 工具更好地輔助自己寫代碼&#xff0c;或許…

JDK 23 和 JDK 21 的區別

JDK 23 和 JDK 21 的區別主要在于支持周期和功能特性&#xff1a; 支持周期&#xff1a; JDK 23&#xff1a;此版本是一個常規發布版本&#xff0c;支持時間較短&#xff0c;通常是六個月。這種版本適合希望使用最新特性和改進的用戶。JDK 21&#xff1a;這是一個長期支持&…

springboot自動配置原理(高低版本比較)spring.factories文件的作用

SpringBootApplication public class SpringSecurityApplication {public static void main(String[] args) {SpringApplication.run(SpringSecurityApplication.class, args);}}注解SpringBootApplication Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Doc…

使用Websocket進行前后端實時通信

1、引入jar&#xff0c;spring-websocket-starter <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency> 2、配置websocket config import org.springframe…

vue2 - Day05 - VueX

Vuex 是 Vue.js 官方的狀態管理庫。它是一個讓你能在應用中集中管理共享狀態的工具。當應用的規模逐漸增大&#xff0c;組件之間的數據傳遞變得越來越復雜時&#xff0c;Vuex 就成為了救星&#xff0c;提供了一個集中式的存儲來管理所有的組件狀態&#xff0c;并且保證狀態以一…

中型項目中 HTTP 的挑戰與解決方案

一、引言 在當今數字化時代&#xff0c;HTTP&#xff08;超文本傳輸協議&#xff09;作為Web應用程序的基礎通信協議&#xff0c;在中型項目的開發中扮演著至關重要的角色。它為客戶端和服務器之間的數據傳輸提供了標準規范&#xff0c;使得各種類型的應用&#xff0c;從簡單的…

IDEA導入Maven工程不識別pom.xml

0 現象 把阿里 sentinel 項目下載本地后&#xff0c;IDEA 中卻沒顯示 maven 工具欄。 1 右鍵Maven Projects 點擊IDEA右側邊欄的Maven Projects&#xff0c;再點擊&#xff1a; 在出現的選擇框中選擇指定的未被識別的pom.xml即可&#xff1a; 2 Add as maven project 右鍵p…

VUE學習筆記(入門)5__vue指令v-html

v-html是用來解析字符串標簽 示例 <!doctype html> <html lang"en"> <head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document<…

OSPF的LSA的學習研究

OSPF常見1、2、3、4、5、7類LSA的研究 1、拓撲如圖&#xff0c;按照地址表配置&#xff0c;激活OSPF劃分相關區域并宣告相關網段 2、1類LSA&#xff0c;每臺運行了OSPF的路由器都會產生&#xff0c;描述了路由器的直連接口狀況和cost 可以看到R1產生了一條router lsa&#xff0…

小結:OSPF協議的工作原理

OSPF&#xff08;開放最短路徑優先&#xff09;優點&#xff1a; 快速收斂&#xff1a;OSPF的收斂速度較快&#xff0c;能迅速響應網絡拓撲變化&#xff0c;并在發生故障后快速更新路由信息。 支持大規模網絡&#xff1a;OSPF適合大型網絡&#xff0c;可以通過劃分區域來減少網…

TypeScript - 利用GPT輔助學習

TypeScript 一、基礎1. 安裝 TypeScript2. 創建你的第一個 TypeScript 文件3. 編譯 TypeScript 代碼4. 變量聲明與類型注解5. 函數與類型注解6. 總結 二、進階常用類型1. 類型別名2. 對象類型3. 類型斷言4.typeof 操作符 高級類型1. 類2. 交叉類型3. 泛型與 keyof4. 索引簽名類…

Java - WebSocket

一、WebSocket 1.1、WebSocket概念 WebSocket是一種協議&#xff0c;用于在Web應用程序和服務器之間建立實時、雙向的通信連接。它通過一個單一的TCP連接提供了持久化連接&#xff0c;這使得Web應用程序可以更加實時地傳遞數據。WebSocket協議最初由W3C開發&#xff0c;并于2…

stm32 no connect target

解決 STM32 報錯 “no target connected” 的方法 前言 stm32最小系統在下載程序是一直報錯&#xff1a;no target connected&#xff0c;試了很多辦法成功不了&#xff0c;最后將芯片擦除了才成功。 一、問題描述 當時是寫flash的時候寫到ST Link 存儲的地方了。 之后就不…

element的el-form-item的prop作用

這個在elemenui中介紹比較簡單&#xff0c;一般寫的時候照著例子寫&#xff0c;會正常運行。沒太注意porp到底有啥影響點。這次有點時間整理一下。 這個https://worktile.com/kb/p/3534641鏈接講述的要比一般csdn上的文章清晰。 總結&#xff1a; Vue表單驗證中的prop屬性用于指…

Open3D計算點云粗糙度(方法一)【2025最新版】

目錄 一、Roughness二、代碼實現三、結果展示博客長期更新,本文最近更新時間為:2025年1月18日。 一、Roughness 通過菜單欄的Tools > Other > Roughness找到該功能。 這個工具可以估計點云的“粗糙度”。 選擇一個或幾個點云,然后啟動這個工具。 CloudCompare只會詢問…

窺探QCC518x/308x系列與手機之間的藍牙HCI記錄與分析 - 手機篇

今天要介紹給大家的是, 當我們在開發高通耳機時如果遇到與手機之間相容性問題, 通常會用Frontline或Ellisys的Bluetooth Analyzer來截取資料分析, 如果手邊沒有這樣的儀器, 要如何窺探Bluetooth的HCI log.這次介紹的是手機篇. 這次跟QCC518x/QCC308x測試的手機是Samsung S23 U…