操作系統(tǒng)是Deepin 15 amd64
安裝g++環(huán)境
sudo apt-get install g++
運(yùn)行g++ -v查看是否安裝成功。
- gcc與g++的區(qū)別
gcc可以用來(lái)編譯C或者C++,但是只能編譯C++源文件,不能自動(dòng)與C++使用的庫(kù)連接,g++可以實(shí)現(xiàn)C++程序的編譯和連接,要編譯C++代碼生成可執(zhí)行文件使用g++
一個(gè)簡(jiǎn)單的CPP文件
#include <iostream>
using namespace std;
int main(){
cout << "Come up and C++ me some time.";
cout << endl;
cout << "you won't regret it " << endl;
return 10;
}```
使用g++進(jìn)行編譯`g++ -o example1 example1.cpp`
然后執(zhí)行可執(zhí)行文件`./example1`
獲取main函數(shù)的返回值`echo $?`
如果想讓編譯和運(yùn)行同時(shí)進(jìn)行可以使用下面的命令:`g++ -o example1 example1.cpp && ./example`
###頭文件
頭文件的作用就是被其他的.cpp包含,本身并不參與編譯,但是實(shí)際上它們的內(nèi)容卻在多個(gè).cpp文件中得到了編譯。
頭文件中應(yīng)該只放變量和函數(shù)的聲明,而不能放它們的定義。
除了:
- const對(duì)象的定義
- 內(nèi)聯(lián)函數(shù)inline的定義
- 類的定義
###分離式編譯
Circle.h 定義了類
ifndef CIRCLE_H
define CIRCLE_H
class Circle{
private:
double r;
public:
Circle();
Circle(double R);
double Area();
};
endif```
Circle.cpp定義了具體的屬性與方法
#include "Circle.h"
#include <iostream>
using namespace std;
Circle::Circle(){
this->r=5.0;
}
Circle::Circle(double R){
this->r=R;
}
double Circle::Area(){
return 3.14*r*r;
}```
main.cpp
include "Circle.h"
include <iostream>
using namespace std;
int main(int argc,char *argv[]){
Circle c(3);
cout << "Area=" << c.Area() << endl;
return 0;
}```
編譯:
-c命令表示編譯,頭文件不允許顯式編譯,實(shí)際上已經(jīng)編譯,如果只修改了一個(gè)源文件(CPP),只需要編譯改動(dòng)的文件。
g++ -c Circle.cpp -o Circle.o
g++ -c main.cpp -o main.o
g++ main.o Circle.o -o main
./main
makefile
定義了整個(gè)工程的編譯規(guī)則,自動(dòng)化編譯,只需要一個(gè)make命令,整個(gè)工程完全自動(dòng)編譯,make是一個(gè)命令工具,是一個(gè)解釋makefile中指令的命令工具。
- 基本規(guī)則:
target...:prerequisites...
command```
target指的是目標(biāo)文件,可以是Object File,也可以是可執(zhí)行文件。
prerequisites是生成target所需要的文件或者目標(biāo)
command是make需要執(zhí)行的命令,但是g++命令開(kāi)頭必須有tab空格。
將名字命名為Makefile或者makefile,在命令行下輸入make就可以自動(dòng)化編譯。
main: main.o Circle.o
g++ main.o Circle.o -o main
Circle.o:Circle.cpp
g++ -c Circle.cpp -o Circle.o
main.o:main.cpp
g++ -c main.cpp -o main.o```