Ubuntu下使用GCC和Makefile编译c文件
前言
本文是熟悉并掌握在Linux系统中GCC和Makefile两种方式编译连接并运行c程序,并在windows操作系统上选择一种编译工具运行程序,体会两者的异同。
一、GGC命令行模式
预处理:宏定义展开、头文件展开、条件编译等,同时将代码中的注释删掉,这里并不会检查语法; 编译:检查语法,将预处理后的文件编译成汇编文件; 汇编: 将汇编文件生成目标文件(二进制文件); 链接: C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到可执行程序中去。
GCC命令 | 操作 |
---|
gcc-E | 只进行预处理 | gcc-S | 只进行预处理和编译 | gcc-c | 只编译并生成目标文件 | gcc-o | 生成指定文件名的可执行文件 |
1.vim创建文件
创建sub1.c以及sub1.h
vim sub1.h
#ifndef _SUB1_H
#define _SUB1_H
float x2x(int a, int b);
#endif
vim sub1.c
#include <stdio.h>
#include “sub1.h”
float x2x(int a, int b)
{
return (float)(a+b);
}
创建main.c文件
vim main.c
#include <stdio.h>
#include "sub1.h"
int main()
{
int x=2, y=9;
float sum;
sum=x2x(x,y);
printf("%0.2f\n",sum);
}
2.gcc编译
参考
如果只有单个文件,一般直接执行下面这条命令就可以进行编译了。 执行命令:gcc 文件名.c -o 目标文件名. 如果目标文件名不写,则默认编译出a.out的目标文件(Linux环境下)。
但是并不是想要一次性得到最终的.out文件,而是需要得到编译过程中的一些中间文件,例如汇编代码文件,那么就需要分步编译了。
1.编译出目标文件
gcc -c sub1.c
gcc -c main.c
2.链接为可执行文件
将多个目标文件链接为名为run的可执行文件
gcc main.o sub1.o -o run
3.运行
./run
二、VS2019编译main.c
1.编写main.c和sub1.c文件
使用c语言中extern关键字声明*x2x()*是来自外部其他c程序所定义的函数。
2.执行程序
三、Makefile方式
1.规则
target... : prerequisites ...
command
...
...
-------------------------------------------------------------------------------
target也就是一个目标文件,可以是Object File,也可以是执行文件,还可以是一个标签。
prerequisites就是,要生成那个target所需要的文件或是目标。
command也就是make需要执行的命令。(任意的Shell命令)
而Makefile文件就是将上述编译步骤写进一个文件,在makefile文件中遵守上述规则,就可以使用make命令生成最后的可执行文件,一步到位。
2.创建makefile文件
使用vim编辑器创建一个makefile文件,并在文件中输入gcc命令行模式对应的操作,编辑完成后保存退出。 最后clean是如果不需要生成的目标文件和可执行文件,使用make clean 即可删除。
3.运行结果
使用make clean 删除命令
|