C++类的编译过程

来源:互联网 发布:ubuntu wine命令 安装 编辑:程序博客网 时间:2024/05/26 15:57

之前一直用IDE来开发软件, 对g++下面的类的编译也是一知半解, 做实验很多也是采用g++ -o main main.cpp 之类的简单的测试

最近项目需要,研究对c++的编译和运行, 刚开始测试C++的特性, 并使用命令行式编译过程,下面记录一下最近2天的心得

需要测试如何编译一个c++类的过程,并逐渐完善。但是刚开始的时候就开始有问题出来了

以前一直采用

g++ -o main main.cpp
但是对于在main中调用一个类该如何编译呢

我的三个文件如下:

//A.h

#include <iostream>using namespace std;class A{  public:   A();   virtual ~A();   void test();  private:  int a;};
//A.cpp

#include "A.h"A::A(){cout<< "A constructor"<<endl;}A::~A(){cout<< "A destructor"<<endl;}void A::test(){cout << "A test()" << endl;}

//classTest.cc

#include <stdio.h>#include "A.h"int main(void){ A a; a.test();return 0;}

之前一直认为只要#include这个头文件,就可以自动编译,原来是IDE帮你做的这个事情,(真是IDE用多了)

查了资料才知道, 编译过程包含:

⒈预处理,生成.i的文件
⒉将预处理后的文件转换成汇编语言,生成文件.s
⒊由汇编变为目标代码(机器代码)生成.o的文件
⒋连接目标代码,生成可执行程序
如果我想生产针对main的可执行程序,需要首先对类A进行编译并生成 .o文件,然后对.o文件进行连接生成可执行文件
所以要想生成执行程序,则首先对编译A 
g++ -c A.cpp
生成了A.o, 然后编译classTest.c
g++ -c classTest.c
生成了classTest.o
最后一步链接
g++ -o classTest classTest.o A.o
然后就可以运行./classTest
但是每次对A和classTest进行修改,都要执行三遍上面的语句, 是不是太繁琐了
这个时候我就想起来我之前看过的makefile相关的资料,如果这个时候使用makefile,把
编译的规则都写到makefile里面, 则每次修改文件只要执行一次make即可
所以我有写了一个makefile(第一次想主动写个makefile)
classTest:classTest.o A.og++ -o classTest classTest.o A.oclassTest.o:classTest.c A.hg++ -c classTest.cA.o:A.hg++ -c A.cppclean:rm *.o rm classTest
(当然makefile比较简陋,没有用变量,伪目标等等)
这样我们第一次编译c++使用命令行就结束了



0 0