在 linux 环境下 编译 C/C++ 文件需要使用 gcc 或者 make 的编译软件进行编译
编译有三个过程: 预编译 ----> 编译 -----> 链接 预编译的过程就是将 c/c++ 文件的头文件包含到代码的过程 编译就是将文件变成机器代码 链接就是将代码中使用的各个函数库的机器代码进行链接变成可执行文件
1: 首先学习预编译 gcc -o out.c -E src.c
这是 hello.c 的源文件内容
如: gcc -o shao.c -E hello.c
可以看一下预编译后生成的文件内容
内容就是将 stdio.h 和 stdlib.h 文件拷贝到 shao.c 中
预编译结束后就要进行编译文件: gcc -o out.o -c src.c
如 gcc -o hello.o -c hello.c 就会生成 hello.c 的机器代码 真是顺序是: 生成汇编语言 然后生成机器代码 这里就省略生成汇编语言的过程
机器代码生成后通过链接命令生成可执行文件 gcc -o out src.o....
如 gcc -o hello hello.o
执行编译完成后的可执行文件./hello
到这里 一个 c 文件就被我们用 gcc 成功编译成功啦~~ 到这只是体验了预编译和编译的过程, 那么为很么需要链接的过程才能生成可执行文件, 链接就是将源代码中用到其他库函数的代码链接到编译生成的机器代码:
如更改 hello.c 代码, 使用到另一个 add.c 中的 add(int a,int b) 的方法, 如果不把 add.c 编译成 add.o 文件, 直接使用 gcc -o hello hello.c 生成的可执行文件会报错, 因为 add() 方法的机器代码没有链接进来, 所以第三部需要 gcc -o hello hello.o add.o 链接完成后生成的 hello 可执行文件才能执行:
如图:
使用的 add() 方法是 add.c 中的代码, 需要执行 gcc -o hello.o -c hello.c 和 gcc -o add.o -c add.c 生成 add.o 和 hello.o 的机器代码
然后使用第三个步骤 gcc -o hello add.o hello.o 进行链接生成可执行文件 hello 才能运行
如果不进行 add.o 直接编译 gcc -o hello hello.o 的话可执行文件不能运行
二: 到这基本的预编译 --> 编译 --> 链接的过程都熟悉了 下面学习 make 编译的使用
在真实项目中不使用 gcc 进行编译 文件太多不够方便, 可以把 make 理解为批处理编译, 我要将项目中的. c 文件与. o 文件关联然后生成可执行文件, 完整的 makefile 文件内容如下:
执行 make 命令会自动执行当前目录下的 makefile 文件: 效果如图
这样编译项目的话会很快如果对 makefile 文件内容不太理解的话, 由于时间问题还是去看看 makefile 编译的语法规范
OK Just Like ! Just Do IT!
来源: http://lib.csdn.net/article/embeddeddevelopment/36889