最基本的Linux下C++的編譯和make

1. g++的簡(jiǎn)單用法

其實(shí)我很少寫C代碼,經(jīng)驗(yàn)也就是在windows下的Visual studio下學(xué)點(diǎn)語(yǔ)言的基本用法.
維護(hù)過(guò)一段時(shí)間的Linux下的C++項(xiàng)目,makefile等都是自動(dòng)生成的.印象中這個(gè)makefile比較短小精干,會(huì)引用其他的makefie,以及加些編譯的路徑,我也能寫項(xiàng)目的心需求,或改項(xiàng)目的bug,不過(guò)不是很明白它具體怎么跑起來(lái)的.makefile原理打著呵欠看完了,理解不深入,久了也忘記的差不多了.
今天下午抽空簡(jiǎn)單復(fù)習(xí)了一下:究竟一個(gè)cpp源碼是如何在Linux下被變成可執(zhí)行代碼的.

1.1 最簡(jiǎn)單的代碼生成步驟:

源碼->編譯成.o->鏈接->可執(zhí)行文件

g++是GCC的一個(gè)工具,專門編譯C++.2個(gè)參數(shù):
-c 將xx.cpp編譯成為xx.o
-o 將xxx.o和xx.o等等連接為可執(zhí)行文件yy

先看下gcc的例子吧.

//這是Hello.c
include <stdio.h>
int main(){ 
   printf("Hello,World!\n");    return 0;
}

打開(kāi)終端(命令行),輸入

gcc Hello.c -o hello 

大功告成.執(zhí)行 ./hello 出結(jié)果:

圖1-1

注意:這句話是執(zhí)行的gcc呢,不是g++.因?yàn)槭莄語(yǔ)言嘛

好吧,我這個(gè)其實(shí)是macbook,不過(guò)作為類UNIX系統(tǒng),它只要裝有g(shù)++就OK了,和Linux的效果是一樣的

1.2 有頭文件的項(xiàng)目組成

咱們項(xiàng)目一般都有類,分了頭文件,源文件,所以下面的例子比較接地氣一點(diǎn):

//這是Hello.h
class Hello {
  public:
       Hello();
       int Display();
};    
//這是Hello.cpp
#include<iostream>
#include "Hello.h"
using namespace std;
  
Hello::Hello(){

}
  
int Hello::Display(){
      cout << "Hello,ivy!\n" << endl;
      return 0;
}
//這是MyFirst.cpp
#include <iostream>
#include "Hello.h"
int main(){
    Hello theHello;
     theHello.Display();
     return 0;
}

在命令行執(zhí)行的命令是這樣:

g++ -c Hello.cpp -o Hello.o
g++ -c MyFirst.cpp -o MyFirst.o
g++ MyFirst.o Hello.o -o MyFirst

行了,直接執(zhí)行. /MyFirst 就能看到結(jié)果!

1.3 把上面的命令寫到makefile中

項(xiàng)目有很多文件,不可能一句一句敲這種命令來(lái)編譯,所以要借助makefile文件

新建一個(gè)名叫makefile的文件
看了下這個(gè)makefile的寫法,頓時(shí)得知其中三味:

MyFirst:MyFirst.o hello.o
  g++ MyFirst.o hello.o -o MyFirst
hello.o:Hello.cpp
  g++ -c Hello.cpp -o hello.o
MyFirst.o:MyFirst.cpp
  g++ -c MyFirst.cpp -o MyFirst.o

總結(jié)起來(lái),makefile最簡(jiǎn)單的格式大概有點(diǎn)像下面這個(gè)樣子:

目標(biāo):需要的目標(biāo)1 需要的目標(biāo)2
  命令
 目標(biāo)1: 需要的目標(biāo)xx1   需要的目標(biāo)xx2
  命令

注意:命令前面需要4個(gè)空格的tab,不然報(bào)錯(cuò):
makefile:2: *** missing separator. Stop.

PS:
我是用vim寫的makefile,它要設(shè)置tab為4個(gè)空格有兩種辦法:

  1. 直接在vim的命令模式下輸入:
    :set ts=4
  2. 在~./vimrc(如果沒(méi)有這個(gè)文件就手動(dòng)創(chuàng)建一個(gè))中寫一句:
    set ts=4

輸入make 執(zhí)行一下,效果是一樣的!

圖1-2

綜上所述,如果在Linux下研究點(diǎn)C或者C++語(yǔ)言的小特性,寫點(diǎn)小demon,用上述的技術(shù)就夠啦,很方便啊.
如果要繼續(xù)深入一點(diǎn),就要去跟著 參考資源的第三篇好好做一做啦.

參考資源:
這篇帖子告訴我啥叫g(shù)++
這篇帖子告訴我g++的基本編譯步驟,我基本按照他步驟做的,入門很好
makefile教程,當(dāng)年公司偶然有人分享,我拿到真是如獲至寶啊,還以為是那個(gè)哥們寫的,崇拜的不得了,原來(lái)是網(wǎng)上一位叫陳皓的大神寫的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市帜乞,隨后出現(xiàn)的幾起案子钱反,更是在濱河造成了極大的恐慌朴摊,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件墨缘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)颈娜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)浙宜,“玉大人官辽,你說(shuō)我怎么就攤上這事∷谒玻” “怎么了同仆?”我有些...
    開(kāi)封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)亩钟。 經(jīng)常有香客問(wèn)我乓梨,道長(zhǎng)鳖轰,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任扶镀,我火速辦了婚禮蕴侣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘臭觉。我一直安慰自己昆雀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布蝠筑。 她就那樣靜靜地躺著狞膘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪什乙。 梳的紋絲不亂的頭發(fā)上挽封,一...
    開(kāi)封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音臣镣,去河邊找鬼辅愿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛忆某,可吹牛的內(nèi)容都是我干的点待。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼弃舒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼癞埠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起聋呢,我...
    開(kāi)封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤苗踪,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后坝冕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體徒探,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年喂窟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了测暗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡磨澡,死狀恐怖碗啄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情稳摄,我是刑警寧澤稚字,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響胆描,放射性物質(zhì)發(fā)生泄漏瘫想。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一昌讲、第九天 我趴在偏房一處隱蔽的房頂上張望国夜。 院中可真熱鬧,春花似錦短绸、人聲如沸车吹。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)窄驹。三九已至拣挪,卻和暖如春牵现,著一層夾襖步出監(jiān)牢的瞬間诸老,已是汗流浹背拒迅。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留综膀,地道東北人呻征。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像洞拨,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子负拟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容