分类: C/C++
2009-11-30 17:04:34
GCC的-g选项应该在编译阶段起作用
编译过程:
源代码.c -->预处理(把头文件.h纳入,预处理之后生成的是.i文件) -->编译(检查正确后生成.s汇编代码文件) -->汇编处理(将编译阶段生成的.s文件转换成目标文件.o) -->链接(生成可执行文件)
那么-g选项具体加在那个过程呢?实际上,-g选项应该在编译阶段加入,在生成的汇编代码文件中就有了调试信息,否则就会出现start.S找不到的情况了。所以,Makefile文件如下:
CC = gcc
OBJS = main.o getline.o copy.o
zifu: $(OBJS)
$(CC) $^ -o $@
main.o:main.c gc.h
$(CC) -g -c $<
getline.o:getline.c
$(CC) -g -c $<
copy.o:copy.c
$(CC) -g -c $<
.PHONY:clean
clean:
rm -f $(OBJS) zifu
----------------------------------------
附:实例源代码
[armlinux@lqm example3]$ tree
.
|-- Makefile
|-- copy.c
|-- gc.h
|-- getline.c
`-- main.c
0 directories, 5 files
/*
*copy.c
*copy 'from' into 'to';assume to is big enough
*/
void copy(char to[],char from[])
{
int i;
i = 0;
while ((to[i] = from[i]) != '\0')
++i;
}
/*
*getline.c
*read a line into s,return length
*/
#include
int getline(char s[],int lim)
{
int c,i;
for (i = 0 ; i < lim-1 && (c = getchar()) != EOF && c != '\n' ; ++i)
s[i] = c;
if (c == '\n') {
s[i] = c;
++i;
}
s[i]='\0';
return i;
}
/*
*main.c
*/
/*
*gc.h
*/
int getline(char [],int);
void copy(char [],char []);