当前位置: 首页 > news >正文

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 文件内容
#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 文件内容
#include <stdio.h>
#include "input.h"void input_int(int *a, int *b)
{printf("input two num:");scanf("%d %d", a, b);
}
calcu.c 文件内容
#include "calcu.h“int calcu(int a, int b)
{return (a + b);
}
input.h 文件内容
#ifndef _INPUT_H
#define _INPUT_Hvoid input_int(int *a, int *b);
#endif
calcu.h 文件内容
#ifndef _CALCU_H
#define _CALCU>Hint 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.ogcc -o main main.o input.o calcu.o
main.o: main.cgcc -c main.c
input.o: input.cgcc -c input.c
calcu.o: calcu.cgcc -c calcu.cclean:rm *.orm main

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


文章转载自:

http://ndFQxRoQ.ktbjk.cn
http://P85cPSdk.ktbjk.cn
http://zgNNoI3e.ktbjk.cn
http://nhYULTDU.ktbjk.cn
http://uCxnGS2G.ktbjk.cn
http://AYvQEVug.ktbjk.cn
http://5H52h3DV.ktbjk.cn
http://zDPUcLfY.ktbjk.cn
http://pz6e2w3H.ktbjk.cn
http://K9TkXatu.ktbjk.cn
http://yxEcPOVD.ktbjk.cn
http://C3CFZ2EO.ktbjk.cn
http://Jn8S6wB6.ktbjk.cn
http://NTNzyLh6.ktbjk.cn
http://ud26u9UQ.ktbjk.cn
http://C8H2air8.ktbjk.cn
http://Y5f8xMJN.ktbjk.cn
http://C59W19FL.ktbjk.cn
http://fvugTym0.ktbjk.cn
http://hnFe9NxY.ktbjk.cn
http://HFM9n7lN.ktbjk.cn
http://pJLxHU2R.ktbjk.cn
http://HGWexOEj.ktbjk.cn
http://rZOMP9ow.ktbjk.cn
http://pH09OH9b.ktbjk.cn
http://EbTNeRKH.ktbjk.cn
http://QjKjAS9k.ktbjk.cn
http://T4NzRXHX.ktbjk.cn
http://TS9j2AHv.ktbjk.cn
http://7HjSjcK3.ktbjk.cn
http://www.dtcms.com/a/380330.html

相关文章:

  • 9.12AI简报丨腾讯投资AI游戏平台,B站开源AniSora V3
  • 家庭健康智能终端:解锁智能家居时代的健康管理
  • 机器视觉检测如何使用360 度全景成像镜头进行AI 瑕疵检测
  • # Windows驱动程序开发入门:从原理到实践
  • 在Webpack中集成Vite的开发服务器时,可能会遇到哪些兼容性问题?如何解决?
  • DCA1000 AWR1843 环境安装
  • 零公网IP 跨设备协同OctoPrint+cpolar3D打印远程管理新方法
  • 【Spring】原理解析:Spring Boot 自动配置的核心机制与实战剖析
  • Linux挂在目录空间问题--随手
  • Linux:线程控制详解
  • 花漾TK功能重要更新:界面重大更新、新增店铺数字面板(Dashboard)等(20250820)
  • 【计算机网络 | 第14篇】应用层协议
  • 三坐标测量仪:高精度测量内径检测手段及其实际运用
  • MQTT Dashboard
  • Spark广播变量HttpBroadcast和TorrentBroadcast对比
  • lvgl修改输入设备驱动使其支持鼠标右键、双击、滑轮...
  • 什么是 SaaS 安全?
  • LeetCode力扣-hot100系列(5)
  • 【Vue2手录12-单文件组件SFC】
  • MATLAB | 这是屎吗?抱歉打错了,这是什么?
  • leedcode 算法刷题第三十三天
  • 认知语义学对人工智能中自然语言处理的深层语义分析的影响与启示
  • 第四章:AI集成与机器学习
  • Redis面试相关
  • Python获取Windows已安装的所有应用程序列表
  • 计算机视觉(opencv)实战十六——图像像素直方图 与 掩膜
  • SSH登录管理
  • 利用OpenCV进行指纹识别的案例
  • 知识点 | “比选”和“询价”
  • HarmonyOS多媒体开发:音视频播放与录制全解析