10.Linux編譯或南、分發(fā)工具演化

Linux編譯工具演化

1.gcc/g++

GNU編譯器套裝(英語:GNU Compiler Collection,縮寫為GCC)肴敛,一套編程語言編譯器署海,以GPL及LGPL許可證所發(fā)行的自由軟件,也是GNU項(xiàng)目的關(guān)鍵部分医男,也是GNU工具鏈的主要組成部分之一砸狞。GCC(特別是其中的C語言編譯器)也常被認(rèn)為是跨平臺編譯器的事實(shí)標(biāo)準(zhǔn)。1985年由理查德·馬修·斯托曼開始發(fā)展昨登,現(xiàn)在由自由軟件基金會負(fù)責(zé)維護(hù)工作趾代。

原名為GNU C語言編譯器(GNU C Compiler),因?yàn)樗局荒芴幚鞢語言丰辣。GCC很快地?cái)U(kuò)展撒强,變得可處理C++。之后也變得可處理Fortran笙什、Pascal飘哨、Objective-C、Java琐凭、Ada芽隆,以及Go與其他語言。

許多操作系統(tǒng),包括許多類Unix系統(tǒng)胚吁,如Linux及BSD家族都采用GCC作為標(biāo)準(zhǔn)編譯器牙躺。蘋果電腦預(yù)裝的Mac OS X操作系統(tǒng)也采用這個編譯器。

GCC原本用C開發(fā)腕扶,后來因?yàn)長LVM孽拷、Clang的崛起,它更快地將開發(fā)語言轉(zhuǎn)換為C++半抱。許多C的愛好者在對C++一知半解的情況下主觀認(rèn)定C++的性能一定會輸給C脓恕,但是Taylor給出了不同的意見,并表明C++不但性能不輸給C窿侈,而且能設(shè)計(jì)出更好炼幔,更容易維護(hù)的程序[(GCC's move to C++)。gcc--wiki

gcc應(yīng)該是Linux系統(tǒng)中最基礎(chǔ)的編譯方式了史简,后來演化出的makefile乃秀、cmake等等最后也轉(zhuǎn)化成了相應(yīng)的gcc命令來執(zhí)行,對于test.cc乘瓤,gcc的一步到位的命令如下

gcc test.c -o test

實(shí)際上环形,這個過程經(jīng)過了預(yù)編譯,編譯衙傀,匯編,鏈接四個步驟萨咕,具體解釋可以參見Linux GCC常用命令统抬,但是每次編譯都需要輸入命令行太麻煩了,于是可以使用make命令危队。

2.make

在軟件開發(fā)中聪建,make是一個工具程序(Utility software),經(jīng)由讀取叫做“makefile”的文件茫陆,自動化建構(gòu)軟件金麸。它是一種轉(zhuǎn)化文件形式的工具,轉(zhuǎn)換的目標(biāo)稱為“target”簿盅;與此同時挥下,它也檢查文件的依賴關(guān)系,如果需要的話桨醋,它會調(diào)用一些外部軟件來完成任務(wù)棚瘟。它的依賴關(guān)系檢查系統(tǒng)非常簡單,主要根據(jù)依賴文件的修改時間進(jìn)行判斷喜最。大多數(shù)情況下偎蘸,它被用來編譯源代碼,生成結(jié)果代碼,然后把結(jié)果代碼連接起來生成可執(zhí)行文件或者庫文件迷雪。它使用叫做“makefile”的文件來確定一個target文件的依賴關(guān)系限书,然后把生成這個target的相關(guān)命令傳給shell去執(zhí)行。make--wiki

make命令的一般使用方式是先讀取相關(guān)系統(tǒng)配置章咧,之后使用make進(jìn)行編譯倦西,等待編譯完成以后將相關(guān)庫文件或者可執(zhí)行文件安裝到系統(tǒng)路徑。

./configure
make
sudo make install

一個makefile的教程慧邮,跟我一起寫Makefile调限。使用makefile也會產(chǎn)生一個問題,會在源代碼所在目錄產(chǎn)生許多中間文件误澳,雖然可以使用make clean進(jìn)行刪除耻矮,但還是很麻煩,而且makefile的抽象程度并不高忆谓,所以產(chǎn)生了裆装,cmake、autotools等高度抽象工具倡缠,cmake還能在不污染源代碼目錄的情況下進(jìn)行編譯哨免,所以很多開源項(xiàng)目開始采用cmake的方式進(jìn)行編譯。

3.cmake/qmake

CMake前面已經(jīng)介紹過了昙沦,不再贅述琢唾。

qmake是編譯Qt項(xiàng)目時用的,但是不如CMake好用盾饮。

其實(shí)cmake等工具也是生成makefile的方式進(jìn)行編譯項(xiàng)目采桃,在執(zhí)行cmake ..命令以后可以在build目錄下發(fā)現(xiàn)makefile文件。

4.二進(jìn)制分發(fā)

顧名思義丘损,就是直接將編譯好的可執(zhí)行程序或者動態(tài)庫拷貝到生產(chǎn)環(huán)境中普办,這種情況下的部署速度應(yīng)該只有網(wǎng)速或者U盤讀取速度有關(guān)了,缺點(diǎn)也很明顯徘钥,需要保證開發(fā)環(huán)境與生產(chǎn)環(huán)境的基本一致衔蹲,需要保證依賴庫在生產(chǎn)環(huán)境中存在。

5.git

git是一個分布式的版本管理工具呈础,也是目前最流行的版本管理工具舆驶,同時github也成為了目前最流行的項(xiàng)目托管平臺,同時gitlab猪落、gitea等開源工具也能用來搭建私人的項(xiàng)目托管服務(wù)器贞远,所以git也可以算是一個很方便的分發(fā)、部署工具笨忌,對于一般項(xiàng)目蓝仲,只需要短短幾行代碼就能從源碼進(jìn)行構(gòu)建。

面對一個全新的環(huán)境,我們完全可以用這種方法進(jìn)行軟件分發(fā)袱结,項(xiàng)目部署亮隙,但是缺點(diǎn)也很明顯,每次都需要從源碼進(jìn)行構(gòu)建垢夹,在項(xiàng)目較大或者計(jì)算機(jī)性能不足夠的時候費(fèi)時費(fèi)力溢吻。

git clone http://path/to/test.git
cd test
mkdir build
cd build
cmake .. && make && sudo make install

6.包管理

軟件包管理系統(tǒng)是在電腦中自動安裝、配制果元、卸載和升級軟件包的工具組合促王,在各種系統(tǒng)軟件和應(yīng)用軟件的安裝管理中均有廣泛應(yīng)用。

在Linux發(fā)行版中而晒,幾乎每一個發(fā)行版都有自己的軟件包管理系統(tǒng)蝇狼。常見的有:

  • 管理deb軟件包的dpkg以及它的前端apt(使用于Debian、Ubuntu)倡怎。
  • RPM套件管理員以及它的前端dnf(使用于Fedora)迅耘、前端yum(使用于Red Hat Enterprise Linux)、前端ZYpp(使用于openSUSE)监署、前端urpmi(使用于Mandriva Linux颤专、Mageia)等。使用軟件包管理系統(tǒng)將大大簡化在Linux發(fā)行版中安裝軟件的過程钠乏。軟件包管理系統(tǒng)---wiki

使用cpack進(jìn)行打包栖秕,會在deb包中添加相關(guān)的依信息,參考這篇文章晓避。優(yōu)點(diǎn)很明顯累魔,解決了二進(jìn)制分發(fā)的依賴的問題,只要在包信息中添加相關(guān)信息够滑,會在部署時自動安裝相關(guān)依賴,也解決了源碼分發(fā)的速度問題吕世,缺點(diǎn)也很明顯彰触,如果目標(biāo)系統(tǒng)中沒有包管理系統(tǒng),就GG了命辖。所以產(chǎn)生了另一種分發(fā)機(jī)制况毅,鏡像分發(fā),其中比較流行的是docker尔艇。

7.docker

詳細(xì)介紹參見docker--gitbook尔许。

docker的實(shí)質(zhì)是一種虛擬化技術(shù),傳統(tǒng)的虛擬化技術(shù)是在宿主機(jī)虛擬出一套完整的硬件后運(yùn)行一個完整的操作系統(tǒng)终娃,并在該虛擬系統(tǒng)中運(yùn)行所需應(yīng)用味廊,而docker直接運(yùn)行與宿主內(nèi)核,相比傳統(tǒng)虛擬機(jī)更為輕便。

如果通過docker進(jìn)行分發(fā)余佛,只需要在相應(yīng)的docker鏡像中編譯相應(yīng)的程序以及依賴庫柠新,然后將鏡像推送到服務(wù)器上,在開發(fā)環(huán)境中進(jìn)行下載即可辉巡,這種方式對需要大規(guī)模部署的項(xiàng)目來說恨憎,效率很高,而且更加易于維護(hù)和擴(kuò)展郊楣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末憔恳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子净蚤,更是在濱河造成了極大的恐慌钥组,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件塞栅,死亡現(xiàn)場離奇詭異者铜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)放椰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門作烟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人砾医,你說我怎么就攤上這事拿撩。” “怎么了如蚜?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵压恒,是天一觀的道長。 經(jīng)常有香客問我错邦,道長探赫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任撬呢,我火速辦了婚禮伦吠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘魂拦。我一直安慰自己毛仪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布芯勘。 她就那樣靜靜地躺著箱靴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荷愕。 梳的紋絲不亂的頭發(fā)上衡怀,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天棍矛,我揣著相機(jī)與錄音,去河邊找鬼狈癞。 笑死茄靠,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蝶桶。 我是一名探鬼主播慨绳,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼真竖!你這毒婦竟也來了脐雪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤恢共,失蹤者是張志新(化名)和其女友劉穎战秋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體讨韭,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脂信,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了透硝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狰闪。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖濒生,靈堂內(nèi)的尸體忽然破棺而出埋泵,到底是詐尸還是另有隱情,我是刑警寧澤罪治,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布丽声,位于F島的核電站,受9級特大地震影響觉义,放射性物質(zhì)發(fā)生泄漏雁社。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一晒骇、第九天 我趴在偏房一處隱蔽的房頂上張望歧胁。 院中可真熱鬧,春花似錦厉碟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至呵曹,卻和暖如春款咖,著一層夾襖步出監(jiān)牢的瞬間何暮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工铐殃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留海洼,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓富腊,卻偏偏與公主長得像坏逢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赘被,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355