gcc 常用参数解析
-o:此参数用来指定文件名,不用每次都a.out了。
-g:此参数作用是在可执行文件中加入源代码的信息以供gdb调试使用。 比如可执行文件中第几条机器指令对应源代码的第几行,但并不是把整个源文件嵌入到可执行文件中。
-c:只生成目标文件,即 .o 文件。
-Wall:通常情况下gcc对一些不重要的警告是不提示的,而加上此参数gcc就会提示所有警告,不管严重还是不严重。编译时加上-Wall是个好习惯。
-O:编译器优化,共四个级别。
第二阶段:-E,-S,-I,-l,-L,-v
-E:只做预处理而不编译。
-S:生成汇编代码。
-I:告诉编译器去那里找头文件。
-L:告诉编译器去哪里找需要的库文件,注意,即使库文件就在当前目录下,编译器也不会去找的,所以必须加此参数,除非你的库在默认的寻找目录里,默认目录可以用gcc -print-search-dirs查看。
-l:此参数后紧跟库的名字告诉编译器要链接的库,例如 -ljpeg,即是告诉编译器要链接的库是libjpeg。
-v:可以看到详细的编译过程。
第三阶段:-share,-static,-fPIC
-share: 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库。
-static:此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么动态连接库,就可以运行。
-fPIC:-f后跟一些编译选项,PIC是其中一种,表示生成位置无关的代码(这牵扯到链接时地址重定位的一些知识)。
第四阶段:-M,-MM
-M:此选项可以自动分析目标文件和源文件的依赖关系。
-MM:和上面的那个一样,但是它将忽略由#include<file>造成的依赖关系。
小生正在学习linux c,so将gcc常用参数总结一下,权当学习笔记,也希望对有用的菜鸟有帮助,有不对的地方希望指正。
-o:此参数用来指定文件名,不用每次都a.out了。
-g:此参数作用是在可执行文件中加入源代码的信息以供gdb调试使用。 比如可执行文件中第几条机器指令对应源代码的第几行,但并不是把整个源文件嵌入到可执行文件中。
-c:只生成目标文件,即 .o 文件。
-Wall:通常情况下gcc对一些不重要的警告是不提示的,而加上此参数gcc就会提示所有警告,不管严重还是不严重。编译时加上-Wall是个好习惯。
-O:编译器优化,共四个级别。
第二阶段:-E,-S,-I,-l,-L,-v
-E:只做预处理而不编译。
-S:生成汇编代码。
-I:告诉编译器去那里找头文件。
-L:告诉编译器去哪里找需要的库文件,注意,即使库文件就在当前目录下,编译器也不会去找的,所以必须加此参数,除非你的库在默认的寻找目录里,默认目录可以用gcc -print-search-dirs查看。
-l:此参数后紧跟库的名字告诉编译器要链接的库,例如 -ljpeg,即是告诉编译器要链接的库是libjpeg。
-v:可以看到详细的编译过程。
第三阶段:-share,-static,-fPIC
-share: 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库。
-static:此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么动态连接库,就可以运行。
-fPIC:-f后跟一些编译选项,PIC是其中一种,表示生成位置无关的代码(这牵扯到链接时地址重定位的一些知识)。
第四阶段:-M,-MM
-M:此选项可以自动分析目标文件和源文件的依赖关系。
-MM:和上面的那个一样,但是它将忽略由#include<file>造成的依赖关系。
tips: 其中编译过程很容易记混,但这里面有一个规律:参数是ESC ,而生成的文件是ISO。这样就好记点了。