gcc命令

一般用法:

(1)编译.c文件:

gcc -o example example.c
 

(2)编译.cpp文件:

gcc -o example example.cpp -lstdc++
或者: 
g++ -o example example.cpp
或者: 
c++ -g -o example example.cpp 


详细说明:

在使用GCC编译器的时候,我们必须给出一系列必要的调用参数和文件名称。

GCC编译器的调用参数大约有100多个,这里只介绍其中最基本、最常用的参数。具体可参考GCC Manual。

GCC最基本的用法是∶

gcc [options] [filenames]

其中options就是编译器所需要的参数,filenames给出相关的文件名称。

-c    只编译,不链接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。


-o output_filename    确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。


-g    产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。


-O    对程序进行优化编译、链接,采用这个选项,整个源代码会在编译、链接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、链接的速度就相应地要慢一些。


-O2    比-O更好的优化编译、链接,当然整个编译、链接过程会更慢。


-Idirname    指明源码内include文件所在的目录。将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。C程序中的头文件包含两种情况∶

1) #include <myinc.h>

2) #include “myinc.h”

其中,1)类使用尖括号(< >),2)类使用双引号(“ ”)。对于1)类,预处理程序cpp在系统预设包含文件目录(如/usr/include)中搜寻相应的文件,而2)类,预处理程序在目标文件的文件夹内搜索相应文件。


-lm    表示使用函数库libm.a(或libm.so),可以拆成两部分来看:

-l:加入某个函数库(library);

m:则是libm.so,其中,lib与扩展名(.a或.so)不需要写;


-Ldirname    指明需要的函数库的搜索目录dirname。Linux默认是将函数库放在/lib和/usr/lib当中,所以-L/lib和-L/usr/lib可以省略不写。


例:

gcc sin.c -lm -L/lib -L/usr/lib -I/usr/include
#这个命令较常执行在最终链接成 binary file 的时候;
#-lm 指的是 libm.a 或 libm.so 这个函数库文件;
#-L 后面接的路径是刚才上面那个函数库的搜索目录;
#-I 后面接的是源码内 include 文件所在的目录;


-Wall    指明程序的编译变的更严谨,所有的警告都会显示出来。


-v    gcc执行时执行的详细过程,gcc及其相关程序的版本号。原版gcc manual该选项英文解释是:Print (on standard error output) the commands executed to run the stages of compilation. Also print the version number of the compiler driver program and of the preprocessor and the compiler proper. 编译程序时加上该选项可以看到gcc搜索头文件/库文件时使用的搜索路径。


基本规则:

gcc所遵循的部分约定规则:

.c  为后缀的文件,C语言源代码文件;

.a  为后缀的文件,是由目标文件构成的档案库文件;

.C.cc.cxx  为后缀的文件,是C++源代码文件且必须要经过预处理;

.h  为后缀的文件,是程序所包含的头文件;

.i  为后缀的文件,是C源代码文件且不应该对其执行预处理;

.ii  为后缀的文件,是C++源代码文件且不应该对其执行预处理;

.m  为后缀的文件,是Objective-C源代码文件;

.mm  为后缀的文件,是Objective-C++源代码文件;

.o  为后缀的文件,是编译后的目标文件;

.s  为后缀的文件,是汇编语言源代码文件;

.S  为后缀的文件,是经过预编译的汇编语言源代码文件;



参考:

百度百科:gcc


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值