GCC工具的具体使用

编译工具链

高级语言翻译成机器语言不是一步到位的,以C语言为例,通常要经历以下四个步骤:

1
2
3
预处理--->编译--->汇编--->连接

源代码--->汇编代码--->目标代码--->可执行程序

每一步都需要使用不同的工具,比如源代码需要借助编译工具翻译成汇编代码,汇编代码需要借助汇编器翻译成目标代码,最后还要借助连接器帮忙整理汇总, 那么这些个工具集合到一块就叫做工具链

GCC工具链

由GNU提供的一整套的工具集,这套工具集中包含了汇编器,编译器和链接器,二进制转换,调试工具等

通过GCC,我们可以一步完成源码到可执行文件的编译, 也可以单步独立进行,方便程序员获取中间代码代码,进行调试

GCC常用命令选项

假设只编译单个源文件test.c

  1. 无选项编译

    1
    2
    3
    gcc test.c  
    或者
    gcc test.o

    在当前目录下直接生成可执行文件,默认名称为a.out

  2. 选项-o

    1
    gcc test.c  -o test

    在当前目录下生成名为test的可执行文件

  3. 选项-E

    1
    gcc -E test.c  -o test.i

    在当前目录下生成名为test.i的预处理文件

  4. 选项-S

    1
    gcc -S test.c  -o test.s

    在当前目录下生成名为test.s的汇编文件,将源码转成汇编代码

  5. 选项-c

    1
    gcc -c test.c

    在当前目录下生成名为test.o的目标文件

  6. 选项-O数字

    1
    gcc -O1 test.c  -o test

    在当前目录下生成名为test的可执行文件,并且使用编译优化级别1编译程序。可选级别为1~3,级别越大优化效果越好,但编译时间越长。

多文件编译

比如一个汇编文件aaa.s一个C源文件test.c:

  1. 方式一 多文件同时编译

    直接追加文件名进行同时编译输出即可

    1
    gcc aaa.s test.c -o bbb

    如果要编译的文件都在同一个目录下,可以用通配符gcc *.c -o 来进行编译

  2. 方式二 多文件分开编译

    首先将源文件编译成目标文件

    1
    2
    3
    gcc -c aaa.s  //生成aaa.o

    gcc -c test.c //生成test.o

    然后将所有目标文件连接成可执行文件

    1
    gcc  test.o aaa.o -o test
  3. 方式三 编写makefile文件进行编译

    第一步 makefile文件编写

    1
    2
    3
    4
    # 我是注释
    SRC=aaa.s test.c
    main: $(OBJS) #指定需要生成的文件名称以及相应的依赖关系
    gcc -o main $(SRC) #生成所需要的指令

    第二步 使用bin包下的cs-make工具,直接在命令窗口中执行该指令,默认在当前目录虚招makefile文件

    1
    # cs-make

    该指令实际上执行的就是makefile中我们编写的指令gcc -o main aaa.s test.c

以上三种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译 ,第三种方法适用于文件较多依赖关系复杂的工程编译

本文为作者原创 转载时请注明出处 谢谢

img

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

0%