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é)果:
注意:這句話是執(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è)空格有兩種辦法:
- 直接在vim的命令模式下輸入:
:set ts=4 - 在~./vimrc(如果沒(méi)有這個(gè)文件就手動(dòng)創(chuàng)建一個(gè))中寫一句:
set ts=4
輸入make 執(zhí)行一下,效果是一樣的!
綜上所述,如果在Linux下研究點(diǎn)C或者C++語(yǔ)言的小特性,寫點(diǎn)小demon,用上述的技術(shù)就夠啦,很方便啊.
如果要繼續(xù)深入一點(diǎn),就要去跟著 參考資源的第三篇好好做一做啦.
參考資源:
這篇帖子告訴我啥叫g(shù)++
這篇帖子告訴我g++的基本編譯步驟,我基本按照他步驟做的,入門很好
makefile教程,當(dāng)年公司偶然有人分享,我拿到真是如獲至寶啊,還以為是那個(gè)哥們寫的,崇拜的不得了,原來(lái)是網(wǎng)上一位叫陳皓的大神寫的