我常用的gcc编译器选项

时间:2023-01-04 09:10:34

      本文来小结一下我常用的gcc编译器选项:

      1. gcc test.c

      这个最直接, 会在当前目录下生成a.out, 然后执行./a.out就可以运行程序了。 我在玩程序的时候, 最喜欢用这个, 简洁清晰。


      2. gcc -o test test.c

       这个o, 是小写的, 并不是指定什么目标文件(object file), 而是指定可执行文件(outputfile), 也就是说, 对test.c进行编译, 并生成可执行文件hello, 然后, 我们就可以执行./hello来运行程序了。实际上, 在调测小程序的时候, 我不喜欢这么用, 我还是喜欢gcc test.c


     3. gcc -g test.c

       这个也是对test.c进行编译, 也会生成默认名称的可执行文件a.out, 我们可以利用gdb对这个a.out进行调试分析。 虽然gcc test.c也产生可执行文件a.out, 但没法用gdb来调试, 因为, 此时的a.out中不含调试信息, 谁让你不加-g呢?


     4. gcc -c test.c

         gcc test.o

         gcc -c test.c是用来产生目标文件test.o的, gcc test.o是为了产生可执行文件./a.out的, 有点绕, 但别晕。 

         -c选项很有必要, 假设我们有两个源文件main.c和test.c,  其内容分别为:

#include <stdio.h>

int main()
{
	test();
	return 0;
}

#include <stdio.h>

void test()
{
	printf("test\n");
}
       那么, 可以采用如下方法来逐步操作:

[taoge@localhost myC]$ ls
a.out  main.c  test.c
[taoge@localhost myC]$ rm a.out 
[taoge@localhost myC]$ 
[taoge@localhost myC]$ 
[taoge@localhost myC]$ 
[taoge@localhost myC]$ ls
main.c  test.c
[taoge@localhost myC]$ gcc -c main.c test.c 
[taoge@localhost myC]$ ls
main.c  main.o  test.c  test.o
[taoge@localhost myC]$ gcc main.o test.o
[taoge@localhost myC]$ ls
a.out  main.c  main.o  test.c  test.o
[taoge@localhost myC]$ ./a.out 
test


     当然, 用gcc main.c test.c一步到位也可以, 也是默认生成了a.out, 执行后, 也得到相同的结果。 思考一下, 为什么我们要故意生成一下中间的看似多余的.o文件呢? 因为,当源文件太多后, 如果只修改了一个.c文件, 只需要重新编译这个.c文件即可, 就不用编译其他的.c文件了, 这样可以节省大量的不必要编译时间, 我是深有感触啊。


      5. gcc test.c -lm

      其中test.c的内容如下:

#include <stdio.h>

int main()
{
	printf("%f\n", sin(1));
	return 0;
}
    l是library的缩写, m是libm.so或者libm.a的缩写。


     6. gcc thread.c -lpthread

      关于这个的介绍, 可参考之前博文:http://blog.csdn.net/stpeace/article/details/43282611

    

       当然啦, 这些东西都很简单, 如果要查阅文档, 其实, 一个man gcc命令足以搞定一切, 强大吧。