gcc使用小结

本文绝大部分内容引用《开源》杂志第4期里的《GCC精彩之旅(上)》。在这篇文章里,我看到gcc一些用过和没用过的参数,然后总结在这里供以后参考。

1. 如果不带任何参数,比如“gcc hello.c”,那么编译出来的可执行文件就是a.out;

2. 可以用-o参数指定输出的文件名,比如“gcc ./hello.c -o ./hello.out”。gcc就会按照指定的文件名输出文件,这里就是hello.out。

3. -E参数表示只作预处理。我使用过的预处理就是define替换和include把头文件的内容嵌入。如“gcc -E ./hello.c -o ./hello.i”。文章说,i后缀名的文件就是表示已经预处理过的源文件,不过我还没有试过,又学到东西了。

接下来就是警告和错误部分,这部分最感兴趣,很多是以前听过但是只有半桶水。

4. -pedantic参数表示的如果不符合ANSI C风格的话,会给出警告。比如main入口按照标准是返回int,但是如果返回void就会报警。

5. -Wall,这个很经典。表示输出尽可能多的警告,里面有句话“作为一个好的程序员,是不应该忽略警告的”,其实我觉得也是有一定道理的。

6. -Werror,这个也是经常在别人讨论的时候看得到。该参数的意思是把所有的警告当成错误处理。

接下来是添加额外路径部分

7. -I,表示添加额外的include路径,使用第三方的库的时候而又没有把头文件加到系统include路径时用到。

8. -L,和上面类似,添加额外的lib路径。

优化部分

9. -O表示使用编译器优化,这个好玩,有机会一定要试试。一般有三个级别,-O1,-O2,-O3。数字越高,优化的程度越高,但编译时间也长。文章描述,-O2是比较折衷俄方案。同时还要避免在调试时使用优化。

调试部分

10. 编译的时候加上-g参数就可以使用gdb进行调试了,不过在我看来,gdb似乎是强大但是很难使用的东西,以后有机会试试。

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s