gcc编译器与Makefile入门

在Windows下开发通常使用各种IDE,但在Linux下进行C编程编译代码的话需要用到GCC编译器。

一、编译流程

GCC 编译器的编译流程是:预处理、编译、汇编和链接。预处理就是展开所有的头文件、替换程序中的宏、解析条件编译并添加到文件中。编译是将经过预编译处理的代码编译成汇编代码,也就是我们常说的程序编译。汇编就是将汇编语言文件编译成二进制目标文件。链接就是将汇编出来的多个二进制目标文件链接在一起,形成最终的可执行文件。
新建一个文件用gcc编译:
新建一个c_practice文件夹,在此文件夹下用vim编辑器新建一个main.c文件
在这里插入图片描述
提示没有vim编辑器,安装一下,再使用vim main.c命令编辑代码:
发现vim编辑器没有行号,设置一下,打开/etc/vim/vimrc文件,在文件最下面一行加上:set nu(记得使用管理员权限sudo vim vimrc,不然有可能没有写的权限),以及tab键首行缩进有8空格,同样用set ts=4修改一下
在这里插入图片描述
写一个helloworld
在这里插入图片描述
编译main.c文件使用命令如下

gcc main.c

编译器提示错误
在这里插入图片描述
修改后再编译可以看到文件夹中多出了a.out文件,这是刚刚编译生成的可执行文件,这是编译器自动命名的,使用./a.out运行下看看
在这里插入图片描述
想要指定可执行文件的名字的话,使用-o参数,如

gcc main.c -o main

在这里插入图片描述

二、多文件编译

main.c代码如下

 1 #include <stdio.h>
  2 #include "input.h"
  3 #include "calcu.h"
  4 
  5 void main()
  6 {   
  7     int a, b, num;
  8     
  9     input_int(&a, &b);
 10     num = calcu(a, b);
 11     printf("%d + %d = %d\r\n", a, b, num);
 12 

input.c文件代码:

 1 #include <stdio.h>
  2 #include "input.h"
  3 
  4 void input_int(int *a, int *b)
  5 {
  6     printf("input two num:");
  7     scanf("%d %d", a, b);
  8     printf("\r\n");
  9 }

calcu.c文件

  1 #include "stdio.h"
  2 
  3 int calcu(int a, int b)
  4 {
  5     return (a + b);
  6 }

input.h文件

  1 #ifndef _INPUT_H
  2 #define _INPUT_H
  3 
  4 void input_int(int *a, int *b);
  5       
  6 #endif

calcu.h文件

  1 #ifndef _CALCU_H
  2 #define _CALCU_H
  3 
  4 int calcu(int a, int b);
  5         
  6 #endif

使用命令,输出如下

gcc main.c calcu.c input.c -o main

在这里插入图片描述

三、makefile

如果文件有成百上千个,编译起来时间就很长,书写也费劲,,为此提出了一个解决大工程编译的工具:make。
利用make工具可以自动完成编译工作,这些工作包括:
如果修改了某几个源文件,则只重新编译这几个源文件
如果某个头文件被修改了,则重新编译所有包含该头文件的源文件
利用这种自动编译可以大大简化开发工作,避免不必要的重新编译。make工具通过一个称为Makefile的文件来完成并自动维护编译工作,描述哪些文件需要编译、哪些需要重新编译的文件就叫做 Makefile,Makefile 就跟脚本文件一样,Makefile 里面还可以执行系统命令。使用的时候只需要一个 make命令即可完成整个工程的自动编译。Makefile文件描述了整个工程的编译、连接规则。
在工程目录下创建名为“Makefile”的文件,文件名一定要叫做“Makefile”!!!区分大小写

  1 main: main.o input.o calcu.o
  2     gcc -o main main.o input.o calcu.o
  3 main.o: main.c
  4     gcc -c main.c
  5 input.o: input.c
  6     gcc -c input.c
  7 calcu.o: calcu.c
  8     gcc -c calcu.c
  9     
 10 clean:
 11     rm *.o
 12     rm main

上述代码中所有行首需要空出来的地方一定要使用“TAB”键!不要使用空格键!这是Makefile 的语法要求,编写好得 Makefile 如图所示:
在这里插入图片描述
这里使用gcc -c …命令将相应的.c文件编译成.o文件,然后用gcc -o main …命令将每个.o文件链接起来生成main可执行文件
接下来直接在命令行中输入“make”即可,make 命令会在当前目录下查找是否存在“Makefile”这个文件,如果存在的话就会按照 Makefile 里面定义的编译方式进行编译
在这里插入图片描述
执行make之后可以看到生成了对应的.o文件和main可执行文件,说明编译成功

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值