前言

刚开始学C++,一个.cpp文件就够了,类的定义,声明,实现统统都堆在一个文件中,然后编译连接,生成.exe文件,就完成作业了。
但开始接触项目后,需要和别人一起完成一个大作业时,写在同一个main.cpp明显会有些乱套,这时候,就需要分离编译


先了解一下,我们使用的visual studio 2019或者是 DevC++都是怎么将我们编写的.cpp文件变成.exe可执行文件


cpp转python容易吗 cpp转换成exe_cpp转python容易吗


详细可以看跟我一起写 Makefile(一)


分离编译

分离编译模式是指:一个程序(项目)由若干个.cpp源文件共同实现,而每个源文件单独编译生成.o目标文件,最后将所有目标文件连接起来形成单一.exe可执行文件的过程


将一个项目划分出多个源文件后,逐一编译成目标文件,那这些目标文件又是凭什么相互连接在一起的?

这里就需要知道.h头文件和.cpp源文件的关系了


.h头文件

写类的声明(包括类里面的成员和方法的声明)、函数原型、#define常数等,但一般来说不写出具体的实现。

而为了防止头文件重复包含,一般头文件会有下面三行代码

#ifndef TEACHER_H
#define TEACHER_H

//代码

#endif // TEACHER_H


.cpp源文件

源文件主要写实现头文件中已经声明的那些函数的具体代码。需要注意的是,开头必须#include一下实现的头文件,以及要用到的头文件



预编译



讲实际点,二者的关系就是:

在写a.cpp文件时,需要#include "a.h"

而如果源文件a需要用到源文件b的代码,就在源文件a中进行#include "b.h",而就是靠这个#include,才能在链接时,将所有源文件最终合成一个可执行文件


其中#include叫做编译预处理指令,因为头文件是不能被编译的,可以简单理解成,在a.cpp中的#include "b.h"指令把b.h中的代码在编译前添加到了a.cpp的头部。


预编译指令中,使用<>""的区别:
引号会先在程序所在的路径里找 ,尖括号是从系统的头文件开始找