gcc编译控制过程:(假设源代码为a.c)
(1)源文件到预处理文件: gcc
-E -o a.cxx a.c
a.cxx显示调用哪些头文件
(2)生成汇编代码:
gcc -S -o a.s a.c
a.s显示汇编指令
(3)生成目标代码:
gcc -c -o a.o a.c
(4)链接生成可执行文件: gcc a.o -o
aa.out
gdb调试程序:
(1)生成可执行程序:
gcc -g -o a.debug a.c
(2)终端中输入
gdb
(3)加载程序
file
a.debug
(4)查看代码
list
(enter一次显示10行)
(5)加入断点
break n
(在第n行加入断点)
(6)查看断点
info
breakpoint
(7)运行程序
run
(8)跳转到下一个断点
next
(9)查看变量i的值 print
i
make与makefile编译:
(部分内容参考http://www.cnblogs.com/sunsonbaby/archive/2004/08/26/36677.html)
对于一个包括几百个源文件的应用程序,如果每次都要键入gcc命令进行编译的话,简直就是一场灾难。
使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。
make工具可自动完成编译工作,并且可以只对程序员在上次编译后修改过的部分进行编译。
make工具最主要功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作。
$
make -f
Makefile.debug
例:
一个名为prog的程序由三个C源文件filea.c、fileb.c和filec.c以及库文件LS编译生成
这三个文件还分别包含自己的头文件a.h
、b.h和c.h。
假设filea.c和fileb.c都要声明用到一个名为defs的文件,但filec.c不用。
即在filea.c和fileb.c里都有这样的声明:#include
"defs"
通常情况下,C编译器将会输出三个目标文件filea.o、fileb.o和filec.o。
那么下面的文档就是一个简单的makefile文件,描述了这些文件之间的相互联系:
1.
#This is a example for describing makefile
2. prog :
filea.o fileb.o
filec.o
3.
cc filea.o fileb.o filec.o -LS -o
prog
4. filea.o : filea.c a.h
defs
5.
cc -c filea.c
6. fileb.o :
fileb.c b.h defs
7.
cc -c fileb.c
8.
filec.o : filec.c c.h
9.
cc -c
filec.c
第1行字符为 #
的行为注释行。
第2行指定prog由三个目标文件filea.o、fileb.o和filec.o链接生成。
第3行描述了如何从prog所依赖的文件建立可执行文件。
第4、6、8行分别指定三个目标文件,以及它们所依赖的.c和.h文件以及defs文件。
第5、7、9行则指定了如何从目标所依赖的文件建立目标。
Makefile中允许使用简单的宏指代源文件及其相关编译信息,在引用宏时只需在变量前加$符号
值得注意的是,如果变量名的长度超过一个字符,在引用时就必须加圆括号()。
例如:
1.
# Define a macro for the object files
2. OBJECTS= filea.o
fileb.o filec.o
3. # Define a macro for the library
file
4. LIBES= -LS
5. # use macros
rewrite makefile
6. prog:
$(OBJECTS)
7. cc
$(OBJECTS) $(LIBES) -o prog
8.
……
此时如果执行不带参数的make命令,将连接三个目标文件和库文件LS;
但是如果在make命令后带有新的宏定义:make "LIBES=
-LL
-LS"
则命令行后面的宏定义将覆盖makefile文件中的宏定义。若LL也是库文件,此时make命令将连接三个目标文件以及两个库文件LS和LL
gcc与makefile比较:
(部分内容参考http://www.crazyant.net/414.html)
假如一个多文件程序包含2个C程序文件,一个文件中main函数调用另一个文件的函数display
gcc编译的过程如下:
gcc
-c display.c main.c
gcc -o example display.o
main.o
./example
makefile的操作如下:
进入makefile的编辑界面后,输入如下内容:
main:
display.o main.o
gcc -o example
display.o main.o
然后保存退出,运行make命令,example可执行文件自动创建,直接执行。
gcc与makefile编译 BY 四喜三顺,布布扣,bubuko.com
原文:http://www.cnblogs.com/sxss/p/3620391.html