1. gcc的工作流程

gcc编译器将c源文件到生成一个可执行程序,中间一共经历了四个步骤:
image.png
四个步骤并不是gcc独立完成的,而是在内部调用了其他工具,从而完成了整个工作流程, 其中编译最耗时, 因为要逐行检查语法
image.png
下面以test.c为例介绍gcc的四个步骤:

  1. gcc -E test.c -o test.i
  2. gcc -S test.i -o test.s
  3. gcc -c test.s -o test.o
  4. gcc test.o -o test
  5. // 一步生成最终的可执行程序:
  6. gcc test.c -o test

2. gcc常用参数

  1. -v 查看gcc版本号, —version也可以
  2. -E 生成预处理文件
  3. -S 生成汇编文件
  4. **-c** 只编译, 生成.o文件, 通常称为目标文件
  5. **-I** 指定头文件所在的路径
  6. **-L** 指定库文件所在的路径
  7. **-l** 指定库的名字
  8. **-o** 指定生成的目标文件的名字
  9. **-g** 包含调试信息, 使用gdb调试需要添加-g参数
  10. -On n=0∼3 编译优化,n越大优化得越多

例如:下面代码片段

  1. int a = 10;
  2. int b = a;
  3. int c = b;
  4. printf("%d", c);
  5. //上面的代码可能会被编译器优化成:
  6. int c = 10;
  7. printf("%d", 10);
  1. -Wall 提示更多警告信息

    1. int a;
    2. int b;
    3. int c = 10;
    4. printf(“[%d]\n”, c);

    编译如下:

    1. gcc -o test -Wall test.c
    2. warning: unused variable b [-Wunused-variable]
    3. warning: unused variable a [-Wunused-variable]
  2. -D 编译时定义宏

    1. test.c文件中的代码片段:
    2. printf("MAX==[%d]\n", MAX);
    3. // 编译:
    4. gcc -o test test.c -D MAX=10
    5. gcc -o test test.c -DMAX=10