目录

一、Linux 编写第一个自己的命令

1.命令的概念

2.定义一个自己的命令

二、make 工具和 makefile 文件

1.使用 make 工具

2.makefile文件


一、Linux 编写第一个自己的命令

1.命令的概念

        命令就是可执行程序。

        比如说我们输入 ls -al ,ls 就是可执行程序的的名字。-al 就是要传递进去的参数。

        ps 命令:

        功能:显示进程的动态。

        输入 “ps” 命令

        当 shell 接收到我们的命令以后,会根据我们输入的字符到环境变量和默认路径中去找,环境变量上一 章提过,可以通过打印查看都有哪些环境变量,然后它会去寻找有没有名字和我们输入命令一样的程序。

2.定义一个自己的命令

        进入/home/topeet/test 目录,把原来的都删掉,作者这里先创建一个 .c 文件,使用“touch commond.c ”命令,使用命令“vi commond.c ”打开文件,然后输入以下内容:

#include <stdio.h>
int main(void)
{printf(“This is my commod!\n”);return 0;
}

        接着使用命令“gcc commond.c -o commond ”编译 commond.c 文件,然后运行一下,使用“./commond ”命 令 , 虽然 我 们 现 在 可以 执 行 这 个 可 执行 文 件 , 但 是 现在 我 们 现 在 的这 个 可 执 行 程 序只 能 在/home/topeet/test 这个路径下输入,而且我们还要加上当前目录,如果我切换到上一级目录,就不能用“ ./commond ”来运行 commond ,因为当前目录下没有 commond 这个文件,我们直接输入命令“commond ”也不行,会提示错误。

        我们上一章学了环境变量,环境变量里边 PATH 变量决定了我们的程序或者是命令都要去哪些路径下找,那我们可以把存放可执行程序的路径加到环境变量里面,那么在任意路径下输入 commond 这个命令,它就会自动找到 commond 这个可执行文件来帮助我们执行。

        我们前面学到的根目录下的 bin 文件是专门存放可执行文件的,我们直接把生成的这个 commond 可执行性文件拷贝到根目录下 bin 文件夹也是可以的。即用 cp 命令拷贝到 bin 文件夹,作者输入 “cpcommond /bin/ ”,提示没有权限,加上 sudo ,然后直接输入“commond ”,可以看到打印 This is my commond! ,然后再返回上一级,这个路径下是没有 commond 这个程序的,我再输入“ commond ”,也是可以执行成功的,所以用这个方法是可以的。

        我们不使用这个方法,我们把存放 commond 这个可执行文件的路径加到 PATH 这个变量里面去,先把刚才我们拷贝到 bin 文件夹下的可执行文件把它删掉。

        我们直接使用命令来添加,“export PATH=/home/topeet/test/:$PATH ”,添加环境变量的办法上一章已经讲到了,使用命令“echo $PATH ”来检查是否添加成功,现在就已经成功添加进去了,如下图所示。我们输入“ commond ”这个命令来测试,也能执行成功,然后我在换另一个目录,作者把它切换到 Videos 这个文件夹里面去,输入“ cd Videos”,然后在输入 commond ,同样也能执行成功,同时也验证了之前的说法,命令就是可执行文件。

        本章是把我们之前学到的进行一个串通。比如说环境变量的修改, gcc 的编译。同时我们也知道了平常使用的命令就是一个可执行程序,而且在键盘上输入了我们的命令之后,这个命令发给了 shell 。也就是如下图的这个 bash,是发送给它的,然后它会根据我们输入的这个字符串去环境变量里面去找,去看看有

没有和我们的名字一样的程序。

二、make 工具和 makefile 文件

        前面我们在编写 linux 上第一个程序 hello world 的时候是直接使用 gcc 命令的。我们编译一个程序是非常的简单的,直接输入 gcc 然后跟上程序的名称再跟上指定生成程序的名称,就可以很轻松的编译出 hello这个可执行文件了。但是如果我们以后工作的时候要编译一个工程,这个工程里面有很多的源文件,这时候我们全部使用这个命令来编译那就非常的麻烦了,而且如果我们修改了一个源文件,那么我们使用命令来编译就要再次执行一遍这个过程,就会非常的耗时间。

        如果有小伙伴以前学习过单片机,大家可以类比下单片机开发软件 keil 里面的单独编译和全部编译。单独编译是很省时间的,全部编译就会非常的耗时间,我们使用命令来编译就相当于我们单片机软件中的全部编译。为了解决编译一个工程非常繁琐这个问题,前人就给我们发明了编译辅助工具 make 工具,它的编译思路是非常简单的,它会在编译之前先比较哪个文件的时间发生了改变,如果说这个文件它修改的时间要晚于编译生成的文件,那么它就会按照要求重新构建这些文件,而不是说再浪费时间重新构建其他的文件了。假如在单片机上用 keil 写了一个 c 文件,这个工程里边别的文件没有改,那么我们就不用点全部编译,只要编译一下我们修改过的文件就可以了。make 也是这样的,只不过它比较聪明,它不用再人为

的去判断了,在编译之前会自动帮我们判断。

1.使用 make 工具

        make 工具是编译辅助工具,用来解决使用命令编译工程非常繁琐的问题。

        调用这个命令工具:我们在 windows 上编程使用 ide ,我们有图形界面,有相应的按钮,比如说 build或者 run 来编译。其实 make 这个编译辅助工具使用也是非常简单的,我们在控制台上直接输入 make 命令,它就会自动调用 make 工具。

        我们来直接在这个目录下输入 make ,然后报错了,因为我没有告诉 make 这个工具它按照什么规则来编译我们的程序。如下图所示。

2.makefile文件

        Makefile 就是描述了整个工程编译连接等规则的文件。我们在终端输入完 make 命令之后,调用 make工具,make 就会在当前目录按照文件名就会找 makefile 文件,Makefile 的命名必须是 makefile 或 Makefile ,m 大写小写都是可以的。

       我们刚才输入命令报错的原因是因为在当前目录下是没有 makefile 这个文件的,作者这里新建一个Makefile 文件,然后在当前目录下输入 make 命令,我输入完 make 命令,它就会调用 make 工具,make工具就会在当前目录下找到 makefile 这个文件,这里又报错了,因为作者这里创建的 makefile 文件,他虽然找到了但是里面是空的,因为没有包含任何的规则。如下图所示。

        接下来先给大家写一个简单的来试一下,打开 makefile 文件,敲的时候一定要按 Tab 首行缩进,不能用空格,然后我们输入内容,保存退出,如下图所示。

        然后输入 make ,在当前这个目录下,成功的生成 hello 这个可执行文件,执行一下,可以看到成功输出了,到这里我们的编译流程就已经讲完了,我们也成功的利用 makefile 文件和 make 工具,把 hello.c 编译成了 hello 可执行文件。如下图所示。

        我们弄清楚了什么是 make 工具,怎么来调用 make 工具,makefile 又是什么,弄清楚了他们的关系后,后面我们再学习 makefile 语法和裸机编写 makefile 时,就非常的容易了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88569.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88569.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/88569.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实验一 接苹果

主要步骤苹果树制作&#xff08;苹果与篮子的制作同理&#xff09;为苹果添加标签相机位置设置与游戏面板长宽比设置&#xff08;16:9&#xff09;苹果下落设置&#xff08;将苹果从平抛运动改为垂直下落&#xff09;通过设置物理图层并更改碰撞矩阵表实现通过PlayerPrefs实现游…

Nginx服务器集群:横向扩展与集群解决方案

横向扩展&#xff1a;基础概念 在深入了解Nginx的横向扩展细节之前&#xff0c;首先理解横向扩展的含义及其重要性。横向扩展是指通过增加服务器数量来分散负载并提升整体性能。这与纵向扩展形成对比&#xff0c;纵向扩展是指在单个服务器上增加更多资源&#xff08;如CPU、内…

缺陷的生命周期(Bug Life Cycle)是什么?

一、缺陷生命周期的定义缺陷生命周期是指一个Bug从被发现到最终关闭的完整流程&#xff0c;反映了缺陷在不同角色&#xff08;测试、开发、产品等&#xff09;间的流转状态。它是软件测试流程的核心管理模型&#xff0c;直接影响团队协作效率。二、标准缺陷生命周期阶段以下是通…

AtCoder Beginner Contest 333(A,B,C,D,E,F)

AtCoder Beginner Contest 333 A 题意 输出n个n(n<9) 代码 #include<bits/stdc.h> using namespace std; void solve(){int n;cin>>n;for(int i1;i<n;i)cout<<n; } signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T__1;//cin…

留学真相:凌晨两点被海关拦下时,我才明白人生没有退路

> 独立不是选择&#xff0c;而是生存的必修课下飞机那一刻&#xff0c;幻想中的“镀金生活”瞬间崩塌。伦敦海关凌晨两点的灯光下&#xff0c;你颤抖着翻找学校文件&#xff0c;手机信号格空空如也&#xff1b;大巴误点后&#xff0c;你拖着两个32公斤的行李箱站在阴雨中&am…

探索AIGC领域DALL·E 2的图像生成与人类创意的融合

探索AIGC领域DALLE 2的图像生成与人类创意的融合关键词&#xff1a;AIGC、DALLE 2、图像生成、人类创意、创意融合摘要&#xff1a;本文聚焦于AIGC领域中DALLE 2的图像生成技术与人类创意的融合。首先介绍了相关背景&#xff0c;包括DALLE 2的发展历程和人类创意在艺术创作中的…

【ECharts】多个ECharts版本共存解决方案

多个ECharts版本共存解决方案 在单个HTML页面中使用多个ECharts版本的关键在于避免全局命名空间冲突。下面我将展示一个完整的解决方案&#xff0c;包含两种不同的实现方法。 解决方案思路命名空间隔离法&#xff1a; 使用不同的全局变量名保存不同版本的ECharts在加载新版本前…

力扣热门算法题 204.计数质数,207.课程表,213.打家劫舍II

力扣热门算法题 204.计数质数&#xff0c;207.课程表&#xff0c;213.打家劫舍II&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2025.07.07 可通过leetcode所有测试用例。 目录 204.计数质数 解题思路 完整代码 207.课程表 解题思…

深入理解 macOS 的 quarantine、xattr 与 Gatekeeper

在 macOS 上安装第三方应用时&#xff0c;你是否遇到过如下提示&#xff1f; “xxx.app 已损坏&#xff0c;无法打开。”“无法打开‘xxx.app’&#xff0c;因为它来自身份不明的开发者。”“你确定要打开这个应用吗&#xff1f;它是从互联网下载的。” 这些提示背后&#xff0…

FastAPI学习笔记记录

FastAPI 学习笔记 最近在公司中需要写接口&#xff0c;选取了fastapi这个框架&#xff0c;一个原因是FastAPI 是主流框架&#xff0c;同时FastAPI 有着高性能&#xff0c;支持异步和高并发。 FastAPI 安装 直接用下面两行命令进行安装 pip3 install fastapi pip install uvicor…

HTML(上)

1.web标准主要包括结构(Structure)、表现(Presentation)和行为(Behavior)三个方面。1.1 结构结构用于对网页元素进行整理和分类&#xff0c;核心技术&#xff1a;HTML。 HTML (HyperText Markup Language)&#xff1a;超文本标记语言&#xff0c;用于定义网页的内容和结构&…

杭州乐湾科技有限公司的背景、产品体系与技术能力的全方位深度分析

杭州乐湾科技有限公司的背景、产品体系与技术能力的全方位深度分析 文章目录杭州乐湾科技有限公司的背景、产品体系与技术能力的全方位深度分析**一、公司背景&#xff1a;智慧养老赛道领跑者****1. 基础信息****2. 发展里程碑****二、产品体系&#xff1a;全域智慧养老解决方案…

kettle从入门到精通 第101课 ETL之kettle DolphinScheduler调度kettle

1、下载DolphinSchedulerDolphinScheduler官网下载安装包&#xff0c;选择合适的版本进行下载&#xff0c;地址为https://dolphinscheduler.apache.org/zh-cn/docs/3.1.9/guide/installation/standalone2、启动 DolphinScheduler Standalone Server我这里仅仅为了测试使用&…

微信小程序121~130

1.小程序功能开发-首页功能 通过并发请求获取首页的数据。 // 导入封装的网络请求模块实例 import http from ../utils/http // 定义接口api函数 export const reqIndexData () > {// 通过方式请求并获取首页数据&#xff0c;提升页面渲染速度// 通过Promise.all进行并发请…

Java Stream流:高效数据处理全解析

Java Stream 流详解 Stream 是 Java 8 引入的 API&#xff0c;用于高效处理集合数据&#xff08;如 List、Set、Map 等&#xff09;。它支持函数式编程风格&#xff0c;能实现复杂的查询、过滤、映射等操作&#xff0c;并支持并行处理以提升性能。核心特点 非存储数据结构&…

光子精密双目3D线激光轮廓测量仪,摆脱视觉盲区,1台更比2台强!

光子精密双目3D线激光轮廓测量仪&#xff08;GL-8160D&#xff09;&#xff0c;在GL-8000系列的基础上创新升级。GL-8160D采用全新双目单线设计&#xff0c;突破传统3D视觉检测限制&#xff0c;而且不受外部拼接标定误差影响&#xff0c;有效消除单目盲区&#xff0c;抗光干扰能…

基于Linux驱动的可见光通信方案 —— 开源 OpenVLC 平台入门(附 BeagleBone Black 驱动简单解析)

60 美元玩转 Li-Fi —— 开源 OpenVLC 平台入门&#xff08;附 BeagleBone Black 及驱动解析&#xff09;一、什么是 OpenVLC&#xff1f; OpenVLC 是由西班牙 IMDEA Networks 研究所推出的开源可见光通信&#xff08;VLC / Li-Fi&#xff09;研究平台。它把硬件、驱动、协议栈…

Git系列--4.Git分支设计规范

目录 一、了解开发环境 1.1概念阐述 1.2系统概括图 二、设计规范之GitFlow模型 2.1具体分支概念 2.1.1master 分⽀ 2.1.2release 分⽀ 2.1.3develop 分⽀ 2.1.4feature 分⽀ 2.1.5hotfix 分⽀ 2.2宏观表格 三、分支流程图 一、了解开发环境 1.1概念阐述 对于开发人员…

【时间之外】AI在农机配件设计场景的应用

目录 农机制造业痛点 AI场景畅想 落后就要挨打 农机制造业痛点 最近&#xff0c;我与一位在制造业摸爬滚打多年的老友相聚。酒过三巡&#xff0c;话题渐渐转到他的事业上。他兴致勃勃地跟我讲起&#xff0c;自己正主导着一个规模达几千万的项目&#xff0c;生产基地远在孟加…

基于定制开发开源AI智能名片与S2B2C商城小程序的旅游日志创新应用研究

摘要&#xff1a;本文探讨了旅游日志在记录旅行美景与人物中的重要性&#xff0c;结合当下数字化发展趋势&#xff0c;引入定制开发开源AI智能名片与S2B2C商城小程序的概念。分析如何将这两者与旅游日志风格元素相融合&#xff0c;打造一种创新的旅游记录与分享模式&#xff0c…