C++类的编译过程

之前一直用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.o
	g++ -o classTest classTest.o A.o

classTest.o:classTest.c A.h
	g++ -c classTest.c

A.o:A.h
	g++ -c A.cpp

clean:
	rm *.o 
	rm classTest
(当然makefile比较简陋,没有用变量,伪目标等等)
这样我们第一次编译c++使用命令行就结束了



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值