gcc编译器与Makefile入门

gcc编译器与Makefile入门在 Windows 下开发通常使用各种 IDE 但在 Linux 下进行 C 编程编译代码的话需要用到 GCC 编译器 一 编译流程 GCC 编译器的编译流程是 预处理 编译 汇编和链接 预处理就是展开所有的头文件 替换程序中的宏 解析条件编译并添加到文件中 编译是将经过预编译处理的代码编译成汇编代码 也就是我们常说的程序编译

大家好,我是讯享网,很高兴认识大家。

在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可执行文件,说明编译成功

小讯
上一篇 2025-02-13 14:58
下一篇 2025-02-22 22:02

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/69097.html