本文来小结一下我常用的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命令足以搞定一切, 强大吧。