东莞网站建设0086/爱站长尾关键词挖掘工具
一、Hello World
1、在用户根目录下创建一个C_Program,并在这里面创建3.1文件夹来保存Hellow World程序;
2、安装最新版nvim
①sudo apt-get install ninja-build gettext cmake unzip curl
②sudo apt install lua5.1
③git clone https://github.com/neovim/neovim
④ 进入neovim cd neovim
⑤ 输入下面代码
make CMAKE_BUILD_TYPE=Release
sudo make install
3、安装Nerd Font
① 输入wget https://github.com/ryanoasis/nerd-fonts/releases/download/v3.0.2/FiraMono.zip
② 安装unar, sudo apt install unar
③ 解压文件 unar FiraCode.zip
④之后按照下图操作
4、配置nvim.lazy
① git clone https://github.com/LazyVim/starter ~/.config/nvim
;
② cd nvim
进入nvim;
③ 输入nvim
既可开始安装lazy nvim;
5、打出Hellow World
6、安装gcc、g++、make
① 直接安装 build-essential sudo apt-get install build-essential
② 查看GCC编译器的版本号 gcc -v
7、编译main.c
① 使用gcc编译器来编译文件 gcc mian.c
这个 a.out 就是编译生成的可执行文件。
② 执行文件 ./a.out
③ 指定可执行文件名字 gcc main.c -o mian
二、GCC 编译器
1.gcc命令
命令格式 gcc[选项] [文件名字]
主要选项:
-c :只编译不链接为可执行文件,编译器将输入的.c 文件编译为.o 的目标文件。
-o :<输出文件名>用来指定编译结束以后的输出文件名,如果使用这个选项的话 GCC 默认编译出来的可执行文件名字为 a.out。
-g :添加调试信息,如果要使用调试工具(如 GDB)的话就必须加入此选项,此选项指示编译的时候生成调试所需的符号信息。
-O :对程序进行优化编译,如果使用此选项的话整个源代码在编译、链接的的时候都会进行优化,这样产生的可执行文件执行效率就高。
-O2 : 比-O 更幅度更大的优化,生成的可执行效率更高,但是整个编译过程会很慢
2.编译流程
GCC 编译器的编译流程是:预处理、编译、汇编和链接。预处理就是展开所有的头文件、替换程序中的宏、解析条件编译并添加到文件中。编译是将经过预编译处理的代码编译成汇编代码,也就是我们常说的程序编译。汇编就是将汇编语言文件编译成二进制目标文件。链接就是将汇编出来的多个二进制目标文件链接在一起,形成最终的可执行文件。
三、Makefile基础
描述哪些文件需要编译、哪些需要重新编译的文件就叫做 Makefile。
1.引入Makefile
总共建立5个文件,分别是main.c、input.c、input.h、calcu.c、calcu.h,其中main.c是主体,input.c是负责接收从键盘输入的数值,calcu.c是进行任意两个数字相加。
main.c:
input.c:
calcu.c:
input.h:
calcu.h:
编写完成后就开始用gcc来编写代码:gcc main.c calcu.c input.c -o main
现在我们用makefile来做:
① 在工程目录下创建"Makefile"文件;
② 编写Makefile程序:
③ 使用make命令,这个命令会在当前目录下查找是否存在"Makefile"文件,如果存在就会按照Makefile文件的编译方式进行编译。
2.Makefile语法
目标···...:依赖文件集合······
命令1
命令2
.........
例如:
main: main.o calcu.o input.ogcc -o main main.o input.o calcu.o
这条规则的目标是 main, main.o、 input.o 和 calcu.o 是生成 main 的依赖文件,并且命令列表中的每条命令必须以TAB键开始,不能使用空格。
Make的执行过程:
1、make 命令会在当前目录下查找以 Makefile(makefile 其实也可以)命名的文件。
2、当找到 Makefile 文件以后就会按照 Makefile 中定义的规则去编译生成最终的目标文件。
3、当发现目标文件不存在,或者目标所依赖的文件比目标文件新(也就是最后修改时间比目标文件晚)的话就会执行后面的命令来更新目标。
3.Makefile 变量
Makefile中的变量都是字符串,类似于C语言的宏。
main: main.o calcu.o input.ogcc -o main main.o input.o calcu.o
可以将上面的代码改为以下代码:
在Makefile中,变量的引用是:$(变量名)
①赋值符 "="
使用“=”在给变量的赋值的时候,不一定要用已经定义好的值,也可以使用后面定义的值,比如如下代码:
这里的echo跟c语言中的printf一样,加"@"就不会输出命令执行过程。
②赋值符 ":="
这里的":="不会使用后面定义的变量,只使用前面定义好的。
③赋值符 "?="
curname ?= luoxuesong
这句代码意思是:如果变量curname前面没有被赋值,那么变量就是"luoxuesong",如果前面已经赋值过了,那就使用前面的变量。
④变量追加 "+="
objects = main.o input.o
objects += calcu.o
有些时候需要给定义好的变量添加一些字符串进去,这时候就要使用"+="。最开始变量 objects 的值为 main.o input.o ,后面追加了一个 calcu.o ,所以最后 objects 的值为 main.o input.o calcu.o 。
4.Makefile 模式规则
模式规则中,至少在规则的目标定定义中要包涵“%”,否则就是一般规则,目标中的“%”表示对文件名的匹配,“%”表示长度任意的非空字符串,比如“%.c”就是所有的以.c 结尾的文件,类似与通配符, a.%.c 就表示以a.开头,以.c 结束的所有文件。当“%”出现在目标中的时候,目标中“%”所代表的值决定了依赖中的“%”值,使用方法如下。
但是make现在还用不了。
5.Makefile 自动化变量
自动化变量: 通过一行命令来从不同的依赖文件中生成对应的目标。 这种变量会把模式中所定义的一系列的文件自动的挨个取出,直至所有的符合模式的文件都取完,自动化变量只应该出现在规则的命令中。常用的自动话变量如下。
自动化变量 | 描述 |
$@ | 规则中的目标集合,在模式规则中,如果有多个目标的话,“$@”表示匹配模式中定义的目标集合。 |
$% | 当目标是函数库的时候表示规则中的目标成员名,如果目标不是函数库文件,那么其值为空。 |
$< | 依赖文件集合中的第一个文件,如果依赖文件是以模式(即“%” )定义的,那么“$<”就是符合模式的一系列的文件集合。 |
$? | 所有比目标新的依赖目标集合,以空格分开。 |
$^ | 所有依赖文件的集合,使用空格分开,如果在依赖文件中有多个重复的文件,“$^”会去除重复的依赖文件,值保留一份。 |
$+ | 和“$^”类似,但是当依赖文件存在重复的话不会去除重复的依赖文件。 |
$* | 这个变量表示目标模式中"%"及其之前的部分,如果目标是 test/a.test.c,目标模式为 a.%.c,那么“$*”就是 test/a.test。 |
最常用的"$@、$<和$^"。下面就用模式规则和自动化变量来实现精简Makefile。
6.Makefile 伪目标
一般的目标名都是要生成的文件,而伪目标不代表真正的目标名,在执行make 命令的时候通过指定这个伪目标来执行其所在规则的定义的命令。
使用伪目标的主要是为了避免 Makefile 中定义的只执行命令的目标和工作目录下的实际文件出现名字冲突,有时候我们需要编写一个规则用来执行一些命令,但是这个规则不是用来创建文件的,比如在前面的 clean ,但如果工程目录下创建一个名为"clean"的文件,当执行make clean时, 规则因为没有依赖文件,所以目标被认为是最新的,因此后面的 rm 命令也就不会执行,我们预先设想的清理工程的功能也就无法完成。
6.Makefile 条件判断
# 语法1
<条件关键字><条件为真时执行的语句>
endif# 语法2
<条件关键字><条件为真时执行的语句>
else<条件为假时执行的语句>
endif
关键字有4个:ifeq、ifneq、ifdef和ifndef。
ifeq就是来判断是否相等,ifneq就是来判断是否不想等。
ifeq (<参数 1>, <参数 2>)
ifeq ‘<参数 1 >’ ,‘ <参数 2>’
ifeq “<参数 1>” , “<参数 2>”
ifeq “<参数 1>” , ‘<参数 2>’
ifeq ‘<参数 1>’ , “<参数 2>”
ifdef 和 ifndef 用法如下:
ifdef<变量名>
如果“变量名”的值非空,那么表示表达式为真,否则表达式为假。“变量名”同样可以是一个函数的返回值。
7.Makefile 函数
Makefile中不支持自定义函数。
函数用法如下:
$(函数名 参数集合) 或 ${函数名 参数集合}
①函数 "subst"
函数 subst 用来完成字符串替换。
命令格式: $(subst <from>,<to>,<text>)
此函数的功能是将字符串<text>中的<from>内容替换为<to>,函数返回被替换以后的字符串,例如:
$(subst lxs, LXS, my name is lxs)
这段代码的意思是:把 my name is lxs 中的 lxs 改为 LXS ,所以最后结果为 my name is LXS 。
②函数 "patsubst"
函数 patsubst 用来完成模式字符串替换。
命令格式: $(patsubst <pattern>,<replacement>,<text>)
此函数查找字符串<text>中的单词是否符合模式<pattern>,如果匹配就用<replacement>来替换掉, <pattern>可以使用包括通配符“%”,表示任意长度的字符串,函数返回值就是替换后的字符串。如果<replacement>中也包涵“%”,那么<replacement>中的“%”将是<pattern>中的那个“%”所代表的字符串。例如:
$(patsubst %.c,%.o,a.c b.c c.c)
这段代码意思是:将字符串“a.c b.c c.c”中的所有符合“%.c”的字符串,替换为“%.o”,替换完成以后的字符串为“a.o b.o c.o”。
③函数 "dir"
函数dir是获取目录。
命令格式: $(dir<names…>)
此函数用来从文件名序列<names>中提取出目录部分,返回值是文件名序列<names>的目录部分。例如:
$(dir</src/a.c>)
这段代码意思是:提取文件"/src/a.c"的目录部分,也就是"/src"。
④函数 "notdir"
函数 notdir 去除文件中的目录部分,也就是提取文件名。
命令格式: $(notdir <names…>)
例如: $(notdir </src/a.c>)
这段代码意思是:提取文件"/src/a.c"中的非目录部分,也就是文件名"a.c"。
⑤函数 "foreach"
foreach 函数用来完成循环。
命令格式: $(foreach <var>, <list>,<text>)
此函数的意思就是把参数<list>中的单词逐一取出来放到参数<var>中,然后再执行<text>所包含的表达式。每次<text>都会返回一个字符串,循环的过程中, <text>中所包含的每个字符串会以空格隔开,最后当整个循环结束时, <text>所返回的每个字符串所组成的整个字符串将会是函数 foreach 函数的返回值。
⑥函数 "wildcard"
通配符“%”只能用在规则中,只有在规则中它才会展开,如果在变量定义和函数使用时,通配符不会自动展开,这个时候就要用到函数 wildcard
命令格式: $(wildcard PATTERN…)
例如: $(wildcard *.c)
这段代码意思是:来获取当前目录下所有的.c 文件,类似“%”。
相关文章:

2.1 Linux C 编程
一、Hello World 1、在用户根目录下创建一个C_Program,并在这里面创建3.1文件夹来保存Hellow World程序; 2、安装最新版nvim ①sudo apt-get install ninja-build gettext cmake unzip curl ②sudo apt install lua5.1 ③git clone https://github.…...

服务器数据恢复—ocfs2文件系统被格式化为其他文件系统如何恢复数据?
服务器故障: 由于工作人员的误操作,将Ext4文件系统误装入到存储中Ocfs2文件系统数据卷上,导致原Ocfs2文件系统被格式化为Ext4文件系统。 由于Ext4文件系统每隔几百兆就会写入文件系统的原始信息,原Ocfs2文件系统数据会遭受一定程度…...

海云安参与制定《信息安全技术 移动互联网应用程序(App)软件开发工具包(SDK)安全要求》标准正式发布
近日,由TC260(全国信息安全标准化技术委员会)归口 ,主管部门为国家标准化管理委员会,深圳海云安网络安全技术有限公司(以下简称“海云安”)等多家相关企事业单位共同参与编制的GB/T 43435-2023《…...

如何调用 API | 学习笔记
开发者学堂课程【阿里云 API 网关使用教程:如何调用 API】学习笔记,与课程紧密联系,让用户快速学习知识。 课程地址:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 如何调用 API 调用 API 的三要素 要调用 API 需要三…...

关于云备份项目的HTTP协议字段理解
200状态码 给客户端返回该文件全部内容的响应 304状态码 206状态码 和If-Ranage请求头字段搭配使用,...

掉落的俄罗斯方块
欢迎来到程序小院 掉落的俄罗斯方块 玩法:上键 W↑变换、 左键 A← 左移、右键 D→ 右移、下键S ↓ 加速,两种模式, 可以一个大人玩,也可以两个人一起玩,小鸟经过会撞走方块,快去体验吧^^。开始游戏 html <div idc…...

医院不良事件报告系统源码带鱼骨图分析
医院不良事件上报系统通过 “事前的人员知识培训管理和制度落地促进”、“事中的事件上报和跟进处理”、 以及 “事后的原因分析和工作持续优化”,结合预存上百套已正在使用的模板,帮助医院从对护理事件、药品事件、医疗器械事件、医院感染事件、输血事件…...

数据库相关算法题 V3
订单最多的客户 在考虑多个最多订单客户的情况下可以采用dense_rank()函数,最多则由group by customer_number以及order count(*)得到 select customer_number from (select customer_number,dense_rank() over (order by count(*) desc) as rk from Orders group…...

第二证券:本周3只新股申购,大豆蛋白行业领军企业来了!
截至发稿,本周网上发行有2只新股宣布发行价。创业板新股丰茂股份发行价为31.9元,发行市盈率28.27倍,工作最近一个月平均动态市盈率25.76倍。沪主板新股索宝蛋白发行价为21.29元,发行市盈率26.74倍,工作最近一个月平均动…...

【go语言开发】loglus日志框架的使用
本文将简单介绍loglus框架的基本使用,并给出demo 文章目录 前言Loglus常见用法自定义日志级别使用字段钩子输出到多个位置使用钩子实现自定义日志处理demo 前言 Logrus 是一个用于 Go 语言的结构化日志框架,它提供了丰富的日志级别、钩子和格式化选项。…...

【Unity动画】Unity 动画播放的流程
本文以2D为案例,讲解Unity 播放动画的流程 准备和导入2D动画资源 外部导入序列帧生成的 Unity内部制作的 外部导入的3D动画 2.创建动画过程 打开时间轴Ctrl6 选中场景中的一个未来需要播放动画的物体 回到时间轴点击Create一个新动画片段 拖动2D动画资源放入…...

深度学习——第3章 Python程序设计语言(3.2 Python程序流程控制)
3.2 Python程序流程控制 目录 1.布尔数据类型及相关运算 2.顺序结构 3.选择(分支)结构 4.循环结构 无论是在机器学习还是深度学习中,Python已经成为主导性的编程语言。而且,现在许多主流的深度学习框架,例如PyTorc…...

EasyExcel生成多sheet页的excel
一、controller层 ApiOperation(value "明细查询导出") PostMapping(value "/SummaryDetailExport") public void summaryDetailExport(RequestBody SearchDTO dto, HttpServletResponse response) throws IOException {reportService.deptPackagingSum…...

家用小型洗衣机哪款性价比高?内衣洗衣机品牌推荐
近日,国内著名的电子商务平台公布了“内衣洗衣机产业趋势”的研究报告。该报告指出,由于消费者对生活质量的要求越来越高,内衣洗衣机的行业也有了长足的发展,特别是在今年以来,内衣洗衣机的销售额同比上涨了830%&#…...

为何Go爬虫依然远没有Python爬虫流行
目录 一、Go与Python的比较 1、语言生态 2、易用性 3、库支持 二、Go爬虫的优势 1、性能与并发性 2、跨平台性 3、内存占用 三、Go爬虫的潜力与未来发展 1、社区支持与库完善 2、跨平台移动应用开发 3、大数据处理与实时分析 四、代码示例 五、结论 在当今的互联…...

【华为OD题库-057】MELON的难题-java
题目 MELON有一堆精美的雨花石(数量为n,重量各异),准备送给S和W。MELON希望送给俩人的雨花石重星一致,请你设计一个程序帮MELON确认是否能将雨花石平均分配。 输入描述 第1行输入为雨花石个数:n,0<n <31. 第2行输入为空格分…...

OGG实现Oracle19C到postgreSQL14的实时同步
📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…...

windows 你的电脑不能投影到其他屏幕,请尝试重新安装驱动程序
注意 千万不要去下载什么驱动精灵,太垃圾不好用还一堆附带的软件。按以下步骤进行解决: 解决方法 可能是显卡驱动的问题,我的笔记本按照如下步骤重启一下驱动后解决了,步骤如下: 右键点击桌面的开始菜单,选择”设备…...

2023-简单点-树莓派中的硬件通讯
树莓派中的通讯方式 串口通讯什么是串口通讯?串口通讯的特点 tips并行通讯?基于网络的通讯?socket通讯 串口通讯 什么是串口通讯? 串行通信每次传输一个位元数据,并在连续进行单次过程的基础上进行通信。根据数据的传送方向&am…...

游戏反Frida注入检测方案
在游戏安全对抗过程中,有不少外挂的实现基于对游戏内存模块进行修改,这类外挂通常会使用内存修改器,除此之外,还有一种门槛相对更高、也更难检测的「注入挂」。 据FairGuard游戏安全数据统计,在游戏面临的众多安全风险…...

观海微电子---AF、AG、AR 的差别和作用
一、名称解释及原理 1.AF ---- Anti-fingerprint,中文为抗指纹。一般 SiO2AF 材料(DON,M4、道康宁 AF 材料),一般采用真空蒸发镀膜法。 原理:AF 防污防指纹玻璃是根据荷叶原理,在玻璃外表面涂制…...

颠覆性语音识别:单词级时间戳和说话人分离
vbenjs/vue-vben-admin[1] Stars: 19.7k License: MIT Vue Vben Admin 是一个免费开源的中后台模板,使用最新的 vue3、vite4 和 TypeScript 等主流技术进行开发。该项目提供了现成的中后台前端解决方案,并可用于学习参考。 使用先进的前端技术如 Vue3/…...

吉利展厅 | 透明OLED拼接2x2:科技与艺术的完美融合
产品:4块55寸OLED透明拼接屏 项目地点:南宁 项目时间:2023年11月 应用场景:吉利展厅 在2023年11月的南宁,吉利展厅以其独特的展示设计吸引了众多参观者的目光。其中最引人注目的亮点是展厅中央一个由四块55寸OLED透…...

qnx修改tcp和udp缓冲区默认大小
拷贝/home/test/qnx/qos223/target/qnx7/aarch64le/sbin/sysctl进系统中 https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.neutrino.utilities/topic/s/sysctl.html kern.sbmax 默认262144,这个限制住了发送、接收缓冲器大小 ./sysctl -w kern.sbmax10000…...

vscode的eslint检查代码格式不严谨的快速修复
问题: 原因:复制的代码,esLint检查代码格式不正确。或者写的代码位置不严谨,总是提示 解决 设置在Ctrl S保存时自动格式化代码 1、vscode设置 2、点击右上角,切换json模式 3、添加设置 "editor.codeActionsOn…...

OpenAI GPT-4 Turbo发布:开创AI新时代
🎥 屿小夏 : 个人主页 🔥个人专栏 : IT杂谈 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. GPT-4 Turbo的突破1.1上下文长度和控制手段的加强:1.2多模态支持:…...

基于c 实现 FIFO
功能: 1、读和写长度不限制 2、数据操作 和 指针操作分开(如先操作数据,再操作指针) 适用场景: 单向通信模式,一方写、一方读,可用于任务间单向通信(无需锁) 如&…...

tortoisegit 报错:server refused to start a shell/command
原因:阿里云的云效不支持TortoiseGit 使用 TortoiseGitPlink,请修改为 OpenSSH。 官网修改教程:TortoiseGit 工具相关报错如何处理? 基本流程: 选择设置(Settings),选择通用&#x…...

电商平台API接口指南,京东商品详情接口,京东详情页接口,宝贝详情页接口,商品属性接口,商品信息查询,商品详细信息接口,h5实时详情页数据展示
京东商品详情API接口是京东开放平台提供的一种API接口,通过该接口,可以获取到京东商品的详细信息,如商品名称、价格、图片和描述等信息。 使用方法如下: 注册并获取API密钥:首先需要在京东开放平台上注册并获取API密…...

什么是迁移学习
1 迁移学习概述 迁移学习(Transfer Learning)是机器学习中的一种方法,它允许模型将从一个任务中学到的知识应用到另一个相关的任务中。这种方法在数据稀缺的情况下尤为有用,因为它减少了对大量标记数据的需求。迁移学习已成为深度…...