操作系统是Deepin 15 amd64
安装g++环境
sudo apt-get install g++
运行g++ -v
查看是否安装成功。
- gcc与g++的区别
gcc可以用来编译C或者C++,但是只能编译C++源文件,不能自动与C++使用的库连接,g++可以实现C++程序的编译和连接,要编译C++代码生成可执行文件使用g++
一个简单的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++进行编译`g++ -o example1 example1.cpp`
然后执行可执行文件`./example1`
获取main函数的返回值`echo $?`
如果想让编译和运行同时进行可以使用下面的命令:`g++ -o example1 example1.cpp && ./example`
###头文件
头文件的作用就是被其他的.cpp包含,本身并不参与编译,但是实际上它们的内容却在多个.cpp文件中得到了编译。
头文件中应该只放变量和函数的声明,而不能放它们的定义。
除了:
- const对象的定义
- 内联函数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命令表示编译,头文件不允许显式编译,实际上已经编译,如果只修改了一个源文件(CPP),只需要编译改动的文件。
g++ -c Circle.cpp -o Circle.o
g++ -c main.cpp -o main.o
g++ main.o Circle.o -o main
./main
makefile
定义了整个工程的编译规则,自动化编译,只需要一个make命令,整个工程完全自动编译,make是一个命令工具,是一个解释makefile中指令的命令工具。
- 基本规则:
target...:prerequisites...
command```
target指的是目标文件,可以是Object File,也可以是可执行文件。
prerequisites是生成target所需要的文件或者目标
command是make需要执行的命令,但是g++命令开头必须有tab空格。
将名字命名为Makefile或者makefile,在命令行下输入make就可以自动化编译。
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```