编译:
编译时,编译器需要的是语法的正确,函数与变量的声明的正确。对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。一般来说,每个源文件都应该对应于一个中间目标文件( .o
文件或 .obj
文件)。
链接:
链接时,主要是链接函数和全局变量。所以,我们可以使用这些中间目标文件( .o
文件或 .obj
文件)来链接我们的应用程序。链接器并不管函数所在的源文件,只管函数的中间目标文件(Object File),在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便。所以,我们要给中间目标文件打个包,在Windows下这种包叫“库文件”(Library File),也就是 .lib
文件,在UNIX下,是Archive File,也就是 .a
文件。
CMake 定位
其他Make 工具 | CMake |
---|---|
GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp | CMake |
对应着不同的Makefile | 采用平台统一的CMakeLists.txt 生成自适应的Makefile |
make Makefile 编译 :不同产商的make各不相同,也有不同的语法,但其本质都是在 “文件依赖性”上做文章 | make Makefile 编译 |
CMake用法
Makefile
工程编译规则,描述了整个工程的编译和链接等规则。其中包含了哪些文件需要编译,哪些文件不需要编译,哪些需要先编译,哪些需要重建等。
在生成makefile这步时 会进行语法检查么 会进行.cpp 到.o 么 ?不会。makefile只是编译规则 还没开始编译。makefile命令中就包含了调用gcc(也可以是别的编译器)去编译某个源文件的命令。
Make
make工具就根据makefile中的命令进行编译和链接的。生成.o 这类文件,再进一步链接生成.exe这类文件。
参考
Makefile 简介 - Makefile基本概念介绍 - Makefile 简明教程 | 宅学部落