gcc是什么?
gcc所遵循的部分约定规则:
.c为后缀的文件,C语言源代码文件; .a为后缀的文件,是由目标文件构成的档案库文件; .C,.cc或.cxx
为后缀的文件,是C++源代码文件且必须要经过预处理; .h为后缀的文件,是程序所包含的头文件; .i
为后缀的文件,是C源代码文件且不应该对其执行预处理; .ii为后缀的文件,是C++源代码文件且不应该对其执行预处理;
.m为后缀的文件,是Objective-C源代码文件; .mm为后缀的文件,是Objective-C++源代码文件;
.o为后缀的文件,是编译后的目标文件; .s为后缀的文件,是汇编语言源代码文件; .S为后缀的文件,是经过预编译的汇编语言源代码文件。
以上内容来自百度百科
查看版本号
-v / --version
产生目标文件
-o
-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。
指定头文件目录
-I+目录
编译时定义宏
-D
编译优化
-On n=0∼3
-O0 - 没有优化
-O1 - 缺省值
-O3 - 优化级别最高
-O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。
-O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。
-Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。
提示更多警告信息
-Wall
只编译子程序
-c
-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。
生成预处理文件
-E
包含调试信息
-g (gdb调试的时候必须加此参数)
-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。
虽然有很多东西但是我们一般执行的命令就是
gcc 或者 g++ -o
示例:
必要的安装包:
sudo apt-get install vim
sudo apt-get install g++
sudo apt-get install gcc
下面测试进行测试g++(gcc同理):
下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码:
vim hello.cpp
#include <iostream> int main(void){ std::cout << "hello, world" << std::endl; return(0); } 如果没有设置tab缩进可能会出现下面的情况
在命令行模式输入:gg=G 自动缩进,变为标准格式。
程序使用定义在头文件 iostream 中的 cout,向标准输出写入一个简单的字符串。该代码可用以下命令编译为可执行文件:
g++ hello.cpp
若是c语言直接用 gcc而不是g++了。
编译器 g++ 通过检查命令行中指定的文件的后缀名可识别其为 C++源代码文件。编译器默认的动作:编译源代码文件生成对象文件(object file),链接对象文件和 libstdc++ 库中的函数得到可执行程序。然后删除对象文件。由于命令行中未指定可执行程序的文件名,编译器采用默认的 a.out。程序可以这样来运行:
./a.out
因为有时候一个文件须有多个.c/.cpp需要编译总不能都是a.out吧,所以呢更普遍的做法是通过 -o 选项指定可执行程序的文件名。下面的命令将产生名为 helloworld 的可执行文件:
$ g++ hello.cpp -o hello
在命令行中输入程序名可使之运行:
./helloworld