- 以最基本的一个helloworld程序为例,代码如下(hello.c):
- (其实下面这段代码没什么用处...)
- #include <stdio.h>
- void main()
- {
- int i = 0;
- while(i < 10)
- {
- printf("hello world !!\n");
- i++;
- }
- return ;
- }
- 最基本的gcc编译方式为:
- gcc -o test hello.c
- - o 的意思是 指定编译生成的目标名称,那么上面编译的结果就是产生一个叫做hello的目标文件,
- 可以通过./hello执行,执行结果是输出10条hello world。如果没有-o参数,默认生成的是 .a 类型的文件
- - c 的作用是:只是编译而不做链接。生成的是.o类型的文件。在大型项目里面,写makefile的时候会经常用到
- 这个选项,先把大量的源文件编译成.o类型的文件,在最后再链接到一起。- c 是无法指定生成的.o文件名称的。
- - l 的作用是:包含指定的lib库文件。比如,在程序中用到了pthread,那么在编译的时候必须加上 -lpthread
- 选项,比如上面的程序,gcc -o test -lpthread hello.c。当然,上面的程序没有用到pthread,但是依然是
- 可以编译通过的。
- 与- l 配套的是- L选项,-L选项是指定库文件的路径,如果是自己生成的lib文件,同时lib文件放在别的目录底下
- 的话需要使用这个选项指定包含路径。
- - Idir(需要跟单独的 -I 选项区分) 的作用是:添加一个include文件夹,编译时,会先去该文件夹查找需要的头
- 文件,如果没有,才回去系统默认文件夹查找需要的头文件。
- 如果要用到gdb调试器的话,那么有一个选项是必须的,那就是 - g,- g的意思是产生调试信息,当然-ggdb的话,
- 可能会生成更多gdb可用的调试信息,但其实是-g的一个子参数,如果没有定义-g选项,那么是无法使用gdb进行调试
- 的。
- 还有一个编译选项也是常用的,那就是 -w ,输出警告信息。gcc在编译时,有些情况下是不会打印警告信息的,如果想要
- 看到警告信息,那么这个参数是必须的。比如gcc -o hello -w hello.c 。
- 其他的参数,对我来说还不常用,等用到了再补充。