gcc是Linux/Unix上非常强大的C语言编译器。并且如今也支持C++的编译。与VC不同,gcc是完全跨平台的。到目前为止很多工具都使用gcc作为其编译环境,比如cocos2d-x,android的NDK等等。 学习使用gcc编译器,就是学习它众多的编译参数。就是用连字符-连接的参数.
因为它的参数并不全是单字符的,所以不能使用一个连字符后加多个参数的写法, 要每个参数前面都要加一个连字符.
常用用法
直接在gcc后面加上要编译的C语言源文件
gcc hello.c
这种默认的情况下会生成一个名为a.out的可执行文件。
-o 最常用的编译选项,用于指定要生成的可执行文件的名称。
gcc -o hello hello.c
需要体会的一点是:gcc对于参数的位置无要求!比如也可以写作
gcc hello.c -o hello
惟一要注意的就是-o后面一定要紧跟要生成的可执行文件名。
-g 用于给生成的可执行文件加上调试信息,只有这样才可使用gdb调试。
gcc -g -o hello hello.c
同样参数-g的也可写在hello.c后面。
-D选项
参考如下代码great.c
#include <stdio.h>
int main(int argc, char *argv[])
{
#ifdef MYDEBUG
printf("test\n");
#endif
printf("hello world\n");
return 0;
}
如果我想要让程序打印test,测试该分支运行情况可以用如下命令:
gcc -DMYDEBUG -g -o great great.c
./great
如果直接
gcc -o great great.c
./great
程序执行结果:
通过使用—D选项可以测试程序分支的正确与否,验证程序的逻辑正确性.
华丽的分割线
选项 -E
gcc -E test.c -o test.i 将test.c预处理输出test.i文件。
选项 -S
gcc -S test.i 将预处理输出文件test.i汇编成test.s文件。
选项 -c
gcc -c test.s 将汇编输出文件test.s编译输出test.o文件。
多文件编译与Makefile
1.多个文件一起编译
用法:gcc a.c b.c c.c d.c -o main
作用:将多个.c文件编译后链接成可执行文件 ./main执行
2.单独编译各个源文件,然后对编译后的.o文件进行链接
gcc -c a.c //生成a.o
gcc -c b.c //生成b.o
gcc -c c.c //生成d.o
gcc -c d.c //生成d.o
例子:
display.c
#include <stdio.h>
void display(const char *str)
{
printf("hello world :%s.\n",str);
}
main.c
#include <stdio.h>
extern func();
int main()
{
display("52coder");
return 0;
}
关于在main.c中extern func()是告诉编译器func()声明在别的文件,如果不加这一行的话会有如下告警:
main.c:5:5: warning: implicit declaration of function ‘display’ [-Wimplicit-function-declaration]
使用c99标准编译 默认的情况下,编译器是以c89的标准编译的。使用c99则:
gcc -std=c99 hello.c