目录
使用"-I"指定包含的路径:"gcc add.c -I ./include"
使用"-o"创建结果文件:"gcc add.c -I ./include/ -o result"
使用"-D"指定宏编译:"gcc add.c -I ./include/ -D DEBUG -o result"
使用"-g"生成gdb调试文件:"gcc add.c -I ./include/ -D DEBUG -o addresult -g"
使用"-Wall"用于显示警告:"gcc add.c -I ./include/ -D DEBUG -o addresult -Wall"
gcc编译器专用于运行c语言程序的,但也可以运行c++程序,但需要加入特定指令参数。
g++编译器是专用于运行c++语言程序的,可以通过g++去专运行c++程序
gcc编译器的工作流程
普通的一个c程序,想要通过gcc编译器,变成一个可执行的操作程序,就是按以上的环节进行转换的,先对c文件进行预处理展开成后缀为".i"的文件,然后,再将这个文件转换为汇编形式的文件".s",再把这个文件转换为后缀".o"的二进制文件,最后再建立链接,才可以进行可执行的操作。
当然,这些环节是编译器在运行的时候,自动操作完成的,我们敲指令的时候,并不需要敲出来。
通过"file filename"命令,可以看出,可执行的文件描述开头都是有"ELF"的。
gcc编译参数使用
下面以执行add.c为例,对gcc编译器的使用进行说明:
add.c源码:
#include <stdio.h>
#include "head.h"
//#define DEBUG 0
int main(void)
{
// int c;
int a =10, b =10;
#ifdef DEBUG
printf("hello world\n");
#endif
printf("%d + %d is %d\n",a,b,add(a,b));
return 0;
}
int add(int a,int b)
{
return a+b;
}
使用"-I"指定包含的路径:"gcc add.c -I ./include"
所执行的.c文件的头文件没在当前路径下,使用"-I"指定包含的路径。
使用"-o"创建结果文件:"gcc add.c -I ./include/ -o result"
使用"-D"指定宏编译:"gcc add.c -I ./include/ -D DEBUG -o result"
在通过gcc进行编译的时候,如何很方便的控制调试信息显示是很有必要的,gcc提供了命令参数"-D"来起到类似宏定义的操作,在本例的源码中:
//#define DEBUG 0
int main(void)
{
#ifdef DEBUG
printf("hello world\n");
}
存在一个被宏定义所控制的一个的打印信息。可以通过"-D"来控制这个命令是否执行:
使用"-g"生成gdb调试文件:"gcc add.c -I ./include/ -D DEBUG -o addresult -g"
通过"-g"生成的文件,是用于gdb调试的,有很多的调试信息,所以结果文件比平常时候要大
使用"-Wall"用于显示警告:"gcc add.c -I ./include/ -D DEBUG -o addresult -Wall"
使用"-lstdc++"用c++的方式去编译
hello.cpp源码:
/*************************************************************************
> File Name: hello.cpp
> Author: YeKai
> Mail: yekai_23@sohu.com
> Created Time: 2016年11月01日 星期二 10时22分40秒
************************************************************************/
#include<iostream>
using namespace std;
int main(void)
{
cout<<"hello world"<<endl;
return 0;
}
注意:当然如果编译c++代码的话,可以也考虑g++编译器,就可以直接编译了!
使用"-O"优化选项
添加后,会自动对代码进行优化。但整体代码进行优化的话,会调整一些原先设定好的优先级顺序,造成报错,所以,使用这个选项的时候最好还是将代码拆开逐段逐段的调试。
指令参数汇总
- I 包含头文件路径
- L 包含库文件路径
- l 库名 libxxx.so 用法:-lxxx (把前面的"lib"部分给去掉)
- O 优化选项,1-3
- W 警告 all 显示更多的
- c 编译 成.o文件
- E 输出到标准输出,宏替换,头文件展开
- S 编译成汇编
- lstdc++ 编译c++代码
- o 指定目标文件
- g gdb调试使用