Linux下gcc g++ make cmake 联系和区别
C/C++程序从编写到可执行一般经历这几个阶段
- 编写源代码
- 编译器编译代码生成目标文件,如.o文件
- 链接器链接目标文件和其他目标文件/库文件,生成可执行文件,如.exe
Linux平台下,.o
文件一般是通过编译,但还未链接的目标文件。.out
文件是经过相应的链接产生的可执行文件。
编译和链接是靠gcc和g++编译器完成的,两者在编译阶段相同。但是链接阶段g++默认链接C++库。所以一般使用:
- g++编译cpp文件
- gcc编译c文件
- g++也可以编译c文件,gcc要编译cpp文件则需要使用
-lstdc++
参数,使其链接c++库
如果编译和链接阶段的源文件太多,一个一个编译就很麻烦。
于是make工具就出现了,通过编写一个makefile规则文件,make就能依据规则文件批处理编译。
编写makefile文件也是一件麻烦的事情
于是cmake工具就出现了,通过编写一个cmakelist规则文件,cmake就能依据规则自动生成makefile文件或project文件。
所以使用cmake的基本步骤就是:
- 写代码
- 写cmakelist
- 使用cmake
- 生成makefile (包含了多条链接和gcc/g++编译语句)
- 使用make
- 生成可执行文件