【makefile Step by Step 1】背景: GCC和G++的使用
实习生活开始了,接触了一些新的框架,后台开发基本就使用C++了,话说这个C++自从大一做完课程设计几乎就没有用过,现在重新要捡起来了。所以,有时间就记录一下学习笔记吧,开发环境当然也是Linux,想一想在学校早一点告别集成开发环境还是很有必要的,离开那些图形化的开发环境,我们就要使用makefile来进行程序的编译了。使用makefile的基础就是要先掌握GCC和G++编译器的基本命令了。
Gcc和G++都是GNU的编译器,前者主要用于编译C程序,而后者则主要用于C++语言。这篇文章就分享这两个编译器的最基本的使用方法(适合想入门的同学)。
其实在编译阶段两个编译器是几乎一样的,如果使用g++来编译C或者C++,在编译阶段也是用的gcc,一点区别是gcc不能自动的去链接iostream那些库,所以如果你直接用gcc编译链接一个cpp文件时就会出现下面的错误:
/tmp/cc9TqiKR.o: In function `__static_initialization_and_destruction_0(int, int)’:
main.cpp:(.text+0×23): undefined reference to `std::ios_base::Init::Init()’
main.cpp:(.text+0×28): undefined reference to `std::ios_base::Init::~Init()’
现在了解一些GCC编译的几个阶段:预处理,编译,汇编,链接。
预处理主要是处理include,define等命令,比如我们定义了一个宏,这个阶段结束之后,这个宏就替换为真实的数值了
编译就是将.c文件编译为.s,这时候C语言就转换为汇编语言了,
汇编顾名思义,就是把刚才的汇编代码转换成机器码了
链接是最后一步,将各个.o文件链接,生成可执行文件,我们常见的link error就放生在这个阶段,主要放生在有多个源文件的时候。
现在就用GCC做例子,假如我们有一个main.c的源文件,一句命令将其编译连接生成可执行文件
gcc -o exec main.c
其中 -o是命令选项 表示生成可执行文件了 后面接的参数 exec就是 这个文件名,可以自定义,最后跟上源文件,很简单吧。
假如我们只想进行编译汇编阶段,可以用-c命令,例如:
gcc -c main.c
这样就会生成 main.o文件,之后可以单独进行链接的操作。
当然gcc 还有很多的命令,比如 -E是 只进行预处理阶段 当你需要GDB调试的时候,加上-g参数
今天就写这些~ 这就是makefie的一些基础,明天跟上基本的makefile的使用~~