首页 > 其他 > 详细

gcc相关

时间:2019-04-08 20:37:50      阅读:134      评论:0      收藏:0      [点我收藏+]

gcc相关

  • 预处理 -E, 调用处理器cpp
      宏替换, 头文件展开, 去注释
      xxx.c-->xxx.i

  • 编译-S, 调用编译器gcc, 编译的过程最消耗时间,
      xxx.i --> xxx.s 生成汇编文件

  • 汇编-c, 调用连接器ld
      xxx.s --> xxx.o 生成二进制文件

  • 连接, 没有参数, 默认输出a.out
       可执行文件

zyb@server:~$ g++ -E test.cpp &> test.i     # 需使用文件重定向, 否则输出至屏幕
zyb@server:~$ g++ -S test.i 
zyb@server:~$ g++ -c test.s 
zyb@server:~$ g++ test.o -o test.app
zyb@server:~$ ls test.*
test.app  test.cpp  test.i  test.o  test.s

gcc常用参数
  -I编译时指定头文件目录
  -L指定静态库所在目录
  -l指定静态库的名字
  -o指定生成文件的名字
  -c将汇编文件生成二进制文件, 得到一个.o文件
  -g生成文件内含调试信息, 文件会比没有调试信息大
  -D在编译的时候指定一个宏, 在测试程序时使用
  -Wall输出警告信息
  -O##代表优化级别, 有1, 2, 3可选

zyb@server:~/dir_test$ cat ./include/head.h 
#ifndef __HEAD_H__
#define __HEAD_H__

#define NUM1  10
#define NUM2  20

int add(int a, int b);
int div(int a, int b);
int mul(int a, int b);
int sub(int a, int b);

#endif
zyb@server:~/dir_test$
zyb@server:~/dir_test$ cat sum.c 
#include <stdio.h>
#include "head.h"

int main() {
    int a = NUM1;
    int aa;
    int b = NUM2;
    int sum = a + b;
    
#ifdef DEBUG
    printf("The sum value is: %d + %d = %d\n", a, b, sum);
#endif
    return 0;
}
zyb@server:~/dir_test$
zyb@server:~/dir_test$ gcc sum.c -I ./include/ -D DEBUG
zyb@server:~/dir_test$ ./a.out 
The sum value is: 1 + 2 = 3
zyb@server:~/dir_test$ gcc sum.c -I ./include/      # 没有编译时没有-D选项 
zyb@server:~/dir_test$ ./a.out                  # 不会输出打印信息
zyb@server:~/dir_test$ gcc sum.c -I ./include/ -Wall    # 输出警告
sum.c: In function ‘main’:
sum.c:8:6: warning: unused variable ‘sum’ [-Wunused-variable]
  int sum = a + b;
      ^
sum.c:6:6: warning: unused variable ‘aa’ [-Wunused-variable]
  int aa;

gcc相关

原文:https://www.cnblogs.com/hesper/p/10672976.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!