Ubuntu C编程 (make工具和Makefile的引用)

一、编写C程序

使用 VIM 编辑器编写程序,也可以使用vscode

1.1、设置 vim 编辑器

①VIM 编辑器默认 TAB 键为 8 空格,要改成 4 空格,用 vi 打开文件 /etc/vim/vimrc ,在此文件最后输入一下代码

复制代码
sudo vim /etc/vim/vimrc    //进入这个文件
set ts=4        //设置 vim 编辑器,一个 TAB = 4 个字节。
:wq         //保存退出

②设置 vim 编辑器,显示行号。同样进入这个 vimrc 这个文件,然后输入一下命令,然后保存退出。

复制代码
set nu    //显示行号
1.2、编写 C 程序

编写代码完成之后 :wq 保存,然后 cat 查看一下是否保存成功。

复制代码
vim hello.c
#include <stdio.h>

int main(int argc,char *argv)
{
    printf("Hello world!\r\n");
    return 0;
}
:wq 

二、编译C程序

使用 gcc 编译器编译 C 程序。gcc 是 Ubuntu 默认自带的,可以通过 gcc -v 查看版本,如果target=x86 表示编译的是 x86 芯片,如果要针对 arm 芯片的编译器我们叫做交叉编译器。gcc 没有图形界面。

复制代码
gcc --help         //查看帮助界面。
gcc hello.c         //会默认生成一个 a.out 这个可执行文件
./a.out         //可以执行这个文件。
gcc -v hello.c        //可以查看详细的编译过程
gcc hello.c -o hello         //通过 -o 可以指定可执行文件的名字

三、Make工具Makefile文件

当源码文件比较多的时候,就不适合通过直接输入 gcc 命令来编译,这时候就需要一个自动化的编译工具。

make :一般说 GNU Make ,是一个软件,用于将源码文件编译为可执行的二进制文件, make 工具主要用于完成自动化编译。 make 工具编译的时候需要 makefile 文件提供编译文件。

Makefile :make 工具所使用的文件,Makefile 指明了编译规则。

四、例子

通过键盘输入两个整形数字,然后计算他们的和并将结果显示在屏幕上,通过三个 .c 文件, input.c main.c calcu.c 和两个 .h 文件 input.h calcu.h 。 main.c 是主体, input.c 负责接收从键盘输入的数值, calcu.c 进行任意两个数相加。

main.c 文件内容
cs 复制代码
#include <stdio.h>
#include "input.h"
#include "calcu.h"

int main(int argc, int *argv[])
{
    int a, b, num;

    input_int (&a, &b);
    num = calcu(a, b);
    printf("%d + %d = %d\r\n",a, b, num);
    return 0;
}
input.c 文件内容
cs 复制代码
#include <stdio.h>
#include "input.h"

void input_int(int *a, int *b)
{
    printf("input two num:");
    scanf("%d %d", a, b);
}
calcu.c 文件内容
cs 复制代码
#include "calcu.h"

int calcu(int a, int b)
{
    return (a + b);
}
input.h 文件内容
cs 复制代码
#ifndef _INPUT_H
#define _INPUT_H

void input_int(int *a, int *b);
#endif
calcu.h 文件内容
cs 复制代码
#ifndef _CALCU_H
#define _CALCU>H

int calcu(int a, int b);

#endif
gcc 命令
复制代码
gcc main.c calcu.c input.c -o main
./main

gcc 编译是重新开始,也就是无论修改哪个文件,编译都是重新开始,为了改便这种只能一个一个编译

复制代码
gcc -c calcu.c
gcc -c main.c
gcc -c input.c
gcc calce.o main.o input.o -o main
./main

这样你修改哪个文件,就编译哪个文件,然后再链接,生成可执行文件,但是如果文件太多一个一个编译浪费时间,于是引入了 make 和 Makefile 。

工具特点:

①如果工程没有编译过,那么工程中所有 .c 文件都要被编译,然后链接成可执行文件。

②如果工程只有个别 .c 文件被修改了,那么只需要编译这些被修改的 C 文件即可。

③如果工程的头文件被修改,那么我们需要编译所有引用这个头文件的 .c 文件,并且链接成可执行文件。

Makefile 语法
复制代码
目标···...: 依赖文件集合······
    命令1
    命令2
    ······
Makefile 使用方法

①在工程目录下创建一个名字为 Makefile 的文件,主要区分大小写。

②根据 Mkaefile 语法书写

下面规则是,目标文件是 main ,main.o inpu.o 和 calcu.o 是生成 main 的依赖文件,如果要更新目标 main ,就必须要先更新它的所有依赖文件,如果依赖我呢见中的任何一个更新,那么目标也必须更新,"更新"就是执行一遍规则中的命令列表。

注意:命令列表中的每条命令必须以 TAB 键开始,不能使用空格!!!

复制代码
main: main.o input.o calcu.o
    gcc -o main main.o input.o calcu.o
main.o: main.c
    gcc -c main.c
input.o: input.c
    gcc -c input.c
calcu.o: calcu.c
    gcc -c calcu.c

clean:
    rm *.o
    rm main

③ 直接输入make 就可以按照 Makefile 进行输出文件。

相关推荐
大白菜132420 小时前
进程的信号
linux
XH-hui20 小时前
【打靶日记】群内靶机Secure
linux·网络安全
Shingmc321 小时前
【Linux】进程控制
linux·服务器·算法
视觉装置在笑71321 小时前
Shell 变量基础与进阶知识
linux·运维
Web极客码1 天前
如何通过命令行工具检查 Linux 版本信息
linux·运维·服务器
Lynnxiaowen1 天前
今天我们继续学习Kubernetes内容pod资源对象
运维·学习·容器·kubernetes·云计算
欢鸽儿1 天前
Vitis】Linux 下彻底清除启动界面 Recent Workspaces 历史路径
linux·嵌入式硬件·fpga
繁华似锦respect1 天前
C++ 智能指针底层实现深度解析
linux·开发语言·c++·设计模式·代理模式
远程软件小帮手1 天前
云电脑挂机功能上线!边上班摸鱼边游戏多开教程
运维·服务器
hweiyu001 天前
Linux 命令:dd
linux