Linux(10)-Make編譯,Configure

Make編譯機制,Configure

  • 1.Make機制
    • demo1.make編譯
    • demo2.make清理
    • demo3:make 安裝
    • demo4:make 卸載
  • 2.configure
    • 2.1 Autoconf
    • 2.2 軟件的源碼安裝

軟件發布的一些基礎知識。

  1. gcc, cpp, as, ld–施工隊,底層干活工人
  2. make --包工頭,指揮工人工作
  3. configure–分析師,分析材料是否具備
  4. Autoconf–市政規劃局,派出有用的分析師

內存泄漏–如果一個長時間運行的程序,不斷申請新的控價,而且不釋放。內存空間被一點一點地消耗光。

內存管理機制

  1. windows總是喜歡盡量留出空間來給程序用
  2. Linux–盡可能多的把會用到的庫、命令等統統都搬進來,能占多少是多少。要運行程序時,他把東西一點一點搬進內存,Linux就把原來占用的資源一點一點往外搬。–Copy-on-Write

free 命令查看內存使用情況(單位為KB)

  1. men–內核緩沖后的利用率
  2. buffer/cache–軟件占用的內存

發布軟件
本機編譯得到的二進制文件,需要很多庫文件來協助才能運行的起來。
查看程序的依賴庫,使用ldd命令。

lld ./rubbish1115

因為需要眾多庫文件協助,所以在Linux上發布軟件時都是發布源碼包,然后在目標系統上再編譯一遍。

1.Make機制

Make 也是一個程序,用于統籌規劃文件編譯。通過Makefile來實現統籌規劃。能夠依據文件修改的時間,智能地判斷出哪些模塊需要重新編譯,重新連接。

windows下的VC也是類似的作用,只不過把他們都用圖形界面封裝了起來。

make 命令運行的時候,會在當前目錄下查抄Makefile 或者 makefile文件。找到就執行,沒找到就報錯。makefile每一段的格式都類似

目標:原料
<tab>加工方法

demo1.make編譯

all:main.o part1.o part2.o        gcc main.o part1.o part2.o -o mybin 
main.o:mian.cgcc -c main.c
part1.o:part1.cgcc -c part1.c
part2.o:part1.cgcc -c part2.c
  1. make 不加任何參數的時候,從all 這一段開始工作。如果原料部分文件不存在,往下去尋找相應的文件,找到后返回,直至加工方法執行完成。
  2. make +參數來指定目標,那么就會去只想指定目標對應的那一段
  3. make 沒有指定目標,makefile中也沒有all, 從文件開始處執行。
  4. Makefile文件可以引用另一makefile文件,因此一個工程軟件中,經常可以看到不同源碼目錄下都有一個makefile文件。

demo2.make清理

clean:rm ./*.orm mybin

demo3:make 安裝

將編譯好的mybin文件,復制到系統中相應的目錄中,完成安裝

install:mybincp ./mybin /user/bin/

demo4:make 卸載

作為一個標準的GNU軟件,生成的makefile中應該高喊uninstall的定義。如果不規范的軟件,沒有提供uninstall方法,就只能手動刪除了。

make uninstall

(瞎猜,盲寫)

uninstall:rm /user/bin/mybin

2.configure

檢查編譯的各種條件是否必備,檢查各種條件都必備之后,會生成Makefile文件。
鐵打的make只有一個,流水的configure每個軟件一個。
運行./configure 之后,會檢查各種各樣的條件,例如 “checking for xxxxx yes/no”, 不是必須的材料沒有了也就沒有了。如果必須的東西沒有了,那么confiugre就會報錯并停止。

2.1 Autoconf

自動生成configure文件(幾萬行,自己敲時不可能了。)

  1. autoscan–檢查源碼目錄結構,生成confiugre.scan報告。(人工)修改該文件,生成configure.in文件,解釋一些有用的內容:

autoscan

# AC_INIT(main.c)--說明這個工程主要的圖紙是那個文件.
# AM_INIT_AUTOMAKE(rubbish1115,1.0)--說明這個項目的名稱,叫做rubbish115, 版本是1.0.
# AC_PROG_CC--configure需要檢查C語言編譯器是否正常.
# AC_OUTPUT(Makefile)--configure需要產生的文件叫Makefile.
  1. aclocal–查看configure.in文件,對一些宏定義做一些詳細的注解和說明,并生成aclocal.m4報告

aclocal

3.autoconf-依據configure.in 和aclocal.m4生成configure腳本
4.automake–生成configure腳本能夠識別和使用的makefile.in文件(自己寫的makefile文件不管用)。需要(人為)提供草稿文件makefile.am。
makefile.am文件內容

AUTOMAKE_OPTIONS=foreign	# 行業規范,
bin_PROGRAMS=rubbish1115    # 說明編譯之后的程序叫rubbish1115
rubbish1115_SOURCES=main.c ai.c board.c # 說明這個工程包括這三個文件

Automake主要幫助開發GNU軟件的人員來維護軟件,所以在執行Automake時,默認會檢查目錄下是否存在標準GNU軟件中應具備的文件,例如NEWS,AUTHOR, ChangeLog等文件。設置foreign,則會忽略對這些文件的檢查。

2.2 軟件的源碼安裝

原料都準備好之后,依次運行以下三條命令,就能把軟件安裝上

./configure
make
make install

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

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

相關文章

redis排行榜之日排行周排行設計

排行榜功能是一個很普遍的需求。使用 Redis 中有序集合的特性來實現排行榜是又好又快的選擇。 一般排行榜都是有實效性的,比如“用戶積分榜”。如果沒有實效性一直按照總榜來排,可能榜首總是幾個老用戶,對于新用戶來說,那真是太令人沮喪了。 首先,來個“今日積分榜”吧,…

Linux(11)-Ubuntu裝系統

Ubuntu18.04裝系統單系統雙系統啟動項dell 5820進不去bios。單系統 裝過好多次ubuntu系統&#xff0c;每次要重裝之前總是得搜索各種教程。現在總結一份簡略教程如下&#xff0c;以備哪天裝系統之需。 1.官網上下載Ios文件:https://ubuntu.com/download/desktop 2.找一個U盤…

最近準備學習下mongodb(一 Windows安裝篇)

1 先安裝mongodb 的windows版本&#xff0c;Linux的我后期會加上的。 https://www.mongodb.com/dr/fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-4.0.0-signed.msi/download 2.安裝php擴展插件&#xff1a; https://pecl.php.net/package/mongo 根據自己的…

leetcode139 單詞拆分

給定一個非空字符串 s 和一個包含非空單詞列表的字典 wordDict&#xff0c;判定 s 是否可以被空格拆分為一個或多個在字典中出現的單詞。 說明&#xff1a; 拆分時可以重復使用字典中的單詞。 你可以假設字典中沒有重復的單詞。 示例 1&#xff1a; 輸入: s "leetcode…

Linux(12)-Ubuntu裝機后的基礎應用

Ubuntu裝機ssh服務器 sudo ps -e |grep ssh # 查看ssh 服務安裝情況 ssh-agent--ssh客戶端&#xff0c;連別人&#xff1b; sshd--ssh服務器&#xff0c; 被別人連 sudo apt-get update # 更新軟件源 sudo apt-get install openssh-server # 安裝ssh服務端ssh設置別…

OpenSSL編寫SSL,TLS程序

一、簡介:SSL(Secure Socket Layer)是netscape公司提出的主要用于web的安全通信標準,分為2.0版和3.0版.TLS(Transport Layer Security)是IETF的TLS 工作組在SSL3.0基礎之上提出的安全通信標準,目前版本是1.0,即RFC2246.SSL/TLS提供的安全機制可以保證應用層數據在互聯網絡傳輸不…

PRML(3)--Chapter2(上)-概率分布-二元變量、多項式變量、高斯分布、指數族分布

PRML第二章上-概率估計2.1二元變量2.1.1 beta 分布2.2 多項式變量2.3 高斯分布2.3.1條件高斯分布、2.3.2邊緣高斯分布2.3.3 高斯變量的貝葉斯定理2.3.4 高斯分布的最大似然估計2.3.5 順序估計2.3.6 高斯分布的貝葉斯推斷2.3.7 學生t分布2.3.8周期性變量2.3.9混合高斯分布2.4 指…

leetcode27 移除元素

給定一個數組 nums 和一個值 val&#xff0c;你需要原地移除所有數值等于 val 的元素&#xff0c;返回移除后數組的新長度。 不要使用額外的數組空間&#xff0c;你必須在原地修改輸入數組并在使用 O(1) 額外空間的條件下完成。 元素的順序可以改變。你不需要考慮數組中超出新…

Harris的角點檢測和特征匹配

一.特征檢測&#xff08;提取&#xff09; 基于特征的圖像配準方法是圖像配準中最常見的方法之一。它不是直接利用圖像像素值&#xff0c;二十通過像素值導出的符號特征&#xff08;如特征點、特征線、特征區域&#xff09;來實現圖像配準&#xff0c;因此可以克服利用灰度信息…

開始入坑深度學習(DeepLearning)

現在游戲越來越難做,國家廣電總局審核越來越變態,國家各種打壓游戲,游戲產業也成為教育失敗的背鍋俠,所以本人現在開始做深度學習方向。 深度學習研究的熱潮持續高漲,各種開源深度學習框架也層出不窮,其中包括TensorFlow、Caffe、Keras、CNTK、Torch7、MXNet、Leaf、The…

PRML(4)--Chapter2(下)-非參數估計

PRML第二章下-非參數估計1.直方圖2. 核方法3. K近鄰概率密度建模-參數化方法-概率密度的形式一定&#xff0c;由數據集確定密度中的參數即可。 局限性–概率模型選的不對&#xff0c;不能夠描述數據模態 此時&#xff0c;介紹一下非參數方法–直方圖&#xff0c;核方法&#…

《盤點那些秀你一臉的秒天秒地算法》(1)

本系列堅持格式&#xff1a;1個抖機靈算法2個較簡單但是天秀的算法1個較難天秀算法。 bogo排序 Bogo排序(Bogo-sort)&#xff0c;又被稱為猴子排序&#xff0c;是一種惡搞排序算法。 將元素隨機打亂&#xff0c;然后檢查其是否符合排列順序&#xff0c;若否&#xff0c;則繼續…

caffe安裝篇(一)

caffe我選擇使用ubuntu源碼安裝,所以先執行: sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev protobuf-compiler libhdf5-serial-dev sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev prot…

caffe2安裝篇(三)通過docker安裝

用普通的安裝方式走了不少彎路,感覺還是用docker方便: 參考的是https://hub.docker.com/r/caffe2ai/caffe2/ Latest docker pull caffe2ai/caffe2 Comes with GPU support, CUDA 8.0, cuDNN 7, all options, and tutorial files. Uses Caffe2 v0.8.1. GPU images (for us…

《盤點那些秀你一臉的秒天秒地算法》(3)

斐波那契之美 斐波那契數列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又稱黃金分割數列、因數學家列昂納多斐波那契&#xff08;Leonardoda Fibonacci&#xff09;以兔子繁殖為例子而引入&#xff0c;故又稱為“兔子數列”。 這個數列就是1、1、2、3、5、8、13…

Linux(15)-

Linux下的編程開發

《盤點那些秀你一臉的秒天秒地算法》(4)

防止新手錯誤的神級代碼 #define ture true #define flase false #difine viod void #define mian main #define &#xff1b; ; 以后有新手問題就把這幾行代碼給他就好啦。 不用額外空間交換兩個變量 a 5 b 8 #計算a和b兩個點到原點的距離之和&#xff0c;并且賦值給…

Linux(16)-

Vim編輯器的使用

php生成有復雜結構的excel文檔

以前都用PHPExcel等工具來生成Excel&#xff0c;但是我們有時候需要非常復雜的樣式&#xff0c;比如有合并單元格和拆分單元格&#xff0c;甚至有顏色&#xff0c;行間距之類的&#xff0c;這樣做起來很費勁&#xff0c;而且你如果使用插件&#xff0c;你也需要學習這里我們可以…

caffe2安裝篇(二) ubuntu16.04 安裝方法

caffe2 ubuntu16.04 安裝方法 Caffe2的安裝相比于caffe在安裝的時候更加簡便,略去了Makefile.config的各種配置,對于有無GPU以及各種可選庫例如opencv,anaconda的支持也更簡單。(其實你直接裝好庫以后make就好,以GPU為例,在make的時候,自動檢測你是否安裝了CUDA,若沒有…