参考链接:GCC使用
-E: 只执行预处理命令
gcc -E hello.c > pianoapan.txt
gcc -E hello.c | more
gcc -E main.c > main.i #编译器将main.c预处理结果输出 main.i 文件。
这个不生成文件, 你需要把它重定向到一个输出文件里面。
-S:只执行预处理和编译,就是指把文件编译成为汇编代码。
gcc -S hello.c
gcc -S main.i -o main.s
编译器将预处理结果文件main.i翻译成汇编代码main.s
-c: 只执行预处理、编译、汇编,也就是他只把程序做成obj文件,生成.o的目标文件。编译和汇编,但不要链接。
gcc -c hello.c
gcc -c main.s -o main.o
无参数: 通过gcc 不加参数可以一步直接编译生成可执行文件
gcc main.c
这里生成的是可执行文件a.out,当然可以通过-o选项更改生成文件的名字,比如将生成的可执行文件命名为hello.exe
gcc main.c -o main.exe
-o< file >: 将输出放入<文件>,也就是指定生成的文件名,gcc默认的生成文件名是a.out,所以可以指定生成文件名。
-g: 加入调试信息,否则不能调试
添加链接描述
添加链接描述
-l(小写L) 需要链接的库名称。即链接库文件去掉lib前缀和.so后的部分。如libev.so就是 -lev;libace.so就是 -lace,如果库文件放在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接了,但如果库文件没放在这三个目录里,而是放在其他目录里,这时我们只用-l参数的话,链接还是会出错,出错信息大概是:“/usr/bin/ld: cannot find-lxxx”,也就是链接程序ld在那3个目录里找不到。
-L 这时另外一个参数-L就派上用场了,比如常用的X11的库,它放在/usr/X11R6/lib目录下,我们编译时就要用-L/usr/X11R6/lib -lX11参数,-L参数跟着的是库文件所在的目录名。
-I(大写i) include头文件的搜索路径。当有此选项时,优先搜索此路径下的头文件。然后按照#include后面是""还是<>来决定是优先在当前目录搜索还是优先在系统目录搜索。默认头文件的路径为当前目录./ 和系统目录 /usr/include /usr/local/include。