【【Linux编程介绍之关键配置和常用用法】】

Linux编程介绍之关键配置和常用用法

Hello World !
我们所说的编写代码包括两部分:代码编写和编译,在Windows下可以使用Visual Studio来完成这两部,可以在 Visual Studio 下编写代码然后直接点击编译就可以了。但是在 Linux 下这两部分是分开的,比如我们用 VIM 进行代码编写,编写完成以后再使用 GCC 编译器进行编译,其中代码编写工具很多,比如 VIM 编辑器、Emacs 编辑器、VScode 编辑器等等,本教程使用 Ubuntu 自带的 VIM 编辑器。先来编写一个最简单的“Hello World”程序,把 Linux 下的 C 编程完整的走一遍。

我们编写 一个 hello world 函数
在这里插入图片描述

我们编译完成之后 点击 cat可以查看设置的数据
在这里插入图片描述

我们 先点击 gcc -v 观察我们 Linux 下安装的 gcc版本
如果 我们并没有安装gcc 的话 我们可以点击
在这里插入图片描述

使用 sudo apt install gcc 进行安装
当我们安装完毕 可以点击 查看 所属的 gcc -v version
在这里插入图片描述

我们可以观察到 上述 记录的是 x86_64 这说明 它只适用于 x86 的 架构之下
然后下面的是版本信息
在这里插入图片描述

点击 gcc main.c 开始编译
编译完成之后会生成 一个 a.out 的 执行文件
我们输入代码 ./a.out 就可以执行这个代码
最后成功输出 Hello World !
a.out 是 gcc 自动产生的名字 我们可以通过 设定gcc main.c -o main 的方法 生成指定所需的可执行文件
在这里插入图片描述

GCC 编译器
gcc 命令
在上一小节我们已经使用过 GCC 编译器来编译 C 文件了,我们使用的是 gcc 命令,gcc
命令格式如下:
gcc [选项] [文件名字]
主要选项如下:
-c 只编译不链接为可执行文件,编译器将输入的.c 文件编译为.o 的目标文件。
-o<输出文件名> 用来指定编译结束以后的输出文件名,如果不使用这个选项的话
GCC 默认编译出来的可执行文件名字为 a.out。
-g 添加调试信息,如果要使用调试工具(如 GDB)的话就必须加入此选项,此选项指示编
译的时候生成调试所需的符号信息。
-O 对程序进行优化编译,如果使用此选项的话整个源代码在编译、链接的的时候都会进
行优化,这样产生的可执行文件执行效率就高。
-O2 比-O 更幅度更大的优化,生成的可执行效率更高,但是整个编译过程会很慢。

下一节介绍 ------ 编译错误警告
我们先创建一个文件夹 3.2 在里面写入错误的代码信息 main.c
在这里插入图片描述

gcc编译器 会帮我们找到错误在哪里

在这里插入图片描述
在这里插入图片描述

编译流程GCC 编译器的编译流程是:预处理、汇编、编译和链接。预处理就是对程序中的宏定义等相关的内容先进行前期的处理。汇编是先将 C 文件转换为汇编文件。当 C 文件转换为汇编文件以后就是文件编译了,编译过程就是将 C源文件编译成.o结尾的目标文件。编译生成的.o文件不能直接执行,而是需要最后的链接,如果你的工程有很多个 c 源文件的话最终就会有很多.o 文件,将这些.o 文件链接在一起形成完整的一个可执行文件。上一小节演示的例程都只有一个文件,而且文件非常简单,因此可以直接使用 gcc 命令生成可执行文件,并没有先将 c 文件编译成.o 文件,然后在链接在一起。
在这里插入图片描述

在这里插入图片描述

我们使用 gcc进行编译 将数据三个 .c文件打包成 一个main文件进行 配置

在这里插入图片描述

我们点击 ./ main 执行 我们打包完成的 文件

在这里插入图片描述

如果文件 很多 我们会并不知道 哪些完成了编译 哪些还没有开始编译
所以我们需要做到是 使用makefile 完成功能
在同一.c .h文件夹下 创建 Makefile 注意大小写

编辑完 在终端输入 make 可以直接完成大批量的编译

在这里插入图片描述

如果没有 发现 makefile
可以点击 sudo apt install make
我们在此处会发现 Makefile 会帮助我们省下大量的时间

Makefile 语法
Makefile 规则格式
Makefile 里面是由一系列的规则组成的,这些规则格式如下:
目标…… : 依赖文件集合……
命令 1
命令 2
……
比如下面这条规则:
main : main.o input.o calcu.o
gcc -o main main.o input.o calcu.o
这条规则的目标是 main,main.o、input.o 和 calcu.o 是生成 main 的依赖文件,如果要更新
目标 main,就必须要先更新它的所有依赖文件,如果依赖文件中的任何一个有更新,那么目
标也必须更新,“更新”就是执行一遍规则中的命令列表。

我们先来看看
我们上面写的Makefile

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

main : main.o input.o calcu.o
gcc -o main main.o input.o calcu.o
我们观察 这条指令 会发现
这条的目标是 main main.o、input.o 和 calcu.o 是生成 main 的依赖文件
如果要更新目标 main,就必须要先更新它的所有依赖文件,如果依赖文件中的任何一个有更新,那么目标也必须更新,“更新”就是执行一遍规则中的命令列表。命令列表中的每条命令必须以 TAB 键开始,不能使用空格!

make 命令会为 Makefile 中的每个以 TAB 开始的命令创建一个 Shell 进程去执行。
1 main: main.o input.o calcu.o
2 gcc -o main main.o input.o calcu.o
3 main.o: main.c
4 gcc -c main.c
5 input.o: input.c
6 gcc -c input.c
7 calcu.o: calcu.c
8 gcc -c calcu.c
9
10 clean:
11 rm *.o
12 rm main
上述代码中一共有 5 条规则,1~2 行为第一条规则,3~4 行为第二条规则,5~6 行为第三条规则,7~8 行为第四条规则,10~12 为第五条规则,make 命令在执行这个 Makefile 的时候其执行步骤如下:首先更新第一条规则中的 main,第一条规则的目标成为默认目标,只要默认目标更新了那么就完成了 Makefile 的工作,完成了整个 Makefile 就是为了完成这个工作。在第一次编译的时候由于 main 还不存在,因此第一条规则会执行,第一条规则依赖于文件 main.o、input.o和 calcu.o 这个三个.o 文件,这三个.o 文件目前还都没有,因此必须先更新这三个文件。make会查找以这三个.o 文件为目标的规则并执行。以 main.o 为例,发现更新 main.o 的是第二条规则,因此会执行第二条规则,第二条规则里面的命令为“gcc –c main.c”,这行命令很熟悉了吧,就是不链接编译 main.c,生成 main.o,其它两个.o 文件同理。最后一个规则目标是 clean,它没有依赖文件,因此会默认为依赖文件都是最新的,所以其对应的命令不会执行,当我们想要执行clean的话可以直接使用命令“make clean”,执行以后就会删除当前目录下所有的.o文件以及 main,因此 clean 的功能就是完成工程的清理
在这里插入图片描述

Makefile 变量
跟 C 语言一样 Makefile 也支持变量的,先看一下前面的例子: main: main.o input.o calcu.o gcc -o main main.o input.o calcu.o上述 Makefile 语句中,main.o input.o 和 calcue.o 这三个依赖文件,我们输入了两遍,我们这个 Makefile 比较小,如果 Makefile 复杂的时候这种重复输入的工作就会非常费时间,而且非常容易输错,为了解决这个问题,Makefile 加入了变量支持。不像 C 语言中的变量有 int、char等各种类型,Makefile中的变量都是字符串!类似 C语言中的宏。使用变量将上面的代码修改

对于整个赋值 和 Makefile 的了解
1.赋值符“=”

在这里插入图片描述

在这里插入图片描述

这是没有加上 @ 的 结果

2.赋值符“:=”
在这里插入图片描述

:= 变量结果 固定了 并不会 对上面的结果变化 产生影响

3、赋值符“?=”
“?=”是一个很有用的赋值符,比如下面这行代码:curname ?= zuozhongkai上 述 代 码 的 意 思 就 是 , 如 果 变 量 curname 前 面 没 有 被 赋 值 , 那 么 此 变 量 就 是“zuozhongkai”,如果前面已经赋过值了,那么就使用前面赋的值。

4、变量追加“+=”
Makefile 中的变量是字符串,有时候我们需要给前面已经定义好的变量添加一些字符串
进去,此时就要使用到符号“+=”,比如如下所示代码:
objects = main.o inpiut.o
objects += calcu.o
一开始变量 objects 的值为“main.o input.o”,后面我们给他追加了一个“calcu.o”,因
此变量 objects 变成了“main.o input.o calcu.o”,这个就是变量的追加。

Makefile 编写规则优化
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
上述 Makefile 中第 3~8 行是将对应的.c 源文件编译为.o 文件,每一个 C 文件都要写一个对应的规则,如果工程中 C 文件很多的话显然不能这么做。为此,我们可以使用 Makefile 中的模式规则,通过模式规则我们就可以使用一条规则来将所有的.c 文件编译为对应的.o 文件。模式规则中,至少在规则的目标定定义中要包涵“%”,否则就是一般规则,目标中的“%”表示对文件名的匹配,“%”表示长度任意的非空字符串,比如“%.c”就是所有的以.c 结尾的文件,类似与通配符,a.%.c 就表示以 a.开头,以.c 结束的所有文件。

这样观察上面的 语句 我们可以修改为
先变成一个大的变量 方便后面对后面直接调用这个大的整体 ‘
objects = main.o input.o calcu.o
main: $(objects)
gcc -o main $(objects)

%.o : %.c
#命令

clean:
rm *.o
rm main

objects = main.o input.o calcu.o
/以前没有这句话

main: $(objects)
main是主要的文件 : 后面objects是 依赖文件
然后是 gcc 开始编译目标文件
gcc -o main $(objects)
编译我们自己设置的main型文件

“示例代码 3.4.3.2”中第 5、6 这两行代码替代了“示例代码 3.4.3.1”中的 3~8 行代码,
修改以后的 Makefile 还不能运行,因为第 6 行的命令我们还没写呢,第 6 行的命令我们需要
借助另外一种强大的变量—自动化变量。

Makefile 自动化变量
上面讲的模式规则中,目标和依赖都是一系列的文件,每一次对模式规则进行解析的时候都会是不同的目标和依赖文件,而命令只有一行,如何通过一行命令来从不同的依赖文件中生成对应的目标呢?自动化变量就是完成这个功能的!所谓自动化变量就是这种变量会把模式中所定义的一系列的文件自动的挨个取出,直至所有的符合模式的文件都取完,自动化变量只应该出现在规则的命令中

我们可以得到常用的自动化变量

在这里插入图片描述

常用的是 $@ $< 依 赖文件集合中的第一个文件,如果依赖文件是以模式 ( 即“ ^ 依赖文件集合中的第一个文件,如果依赖文件是以模式(即“%”)定义的,那么“ 赖文件集合中的第一个文件,如果依赖文件是以模式(<”就是符合模式的一系列的文件集合。
objects = main.o input.o calcu.o
main: $(objects)
gcc -o main $(objects)

%.o : %.c
gcc -c $<

clean:
rm *.o
rm main

重新看一下理解了 本来想说 -c 这么老套 还在用吗
为什么不直接点击 -o 后来 这里才知道
gcc -c 是 只编译成 .o 文件 不进行链接

gcc -o 是 在这里的做法是 将 所有编译完成的.o 文件链接成可执行文件
在这里分开写 那么当我们修改了.c 文件的时候
整个文件处理速度就会大大提升

我们来看这句话
这句话这么说
main : main.o input.o calcu.o
gcc -o main main.o input.o calcu.o
我们会发现 main 这个 像不像 我们之前创建的 gcc -o main main.c 文件
还有一件事
顺序的问题
在这里插入图片描述

上面是用这两种方式书写的
我希望后面的书写 统一 改写成
gcc -o main main.o
这个写法需要 gcc -c main.c
帮助我们先规划到 main.o文件上来

其实之前更著名的是 直接用 gcc -o main main.c
发现也可以 这里 是直接用main.c

这里是 题外话
我们现在 观察 我们现在要处理的问题
main : main.o input.o calcu.o
gcc -o main main.o input.o calcu.o

main 就是我们为了 方便归纳 我们自行设置的
main 被称为 目标文件 main.o 被称为 依赖文件 就是 main 的出现就是依赖于后面这个形式
如果 main 更新 那么 就要更新 依赖文件

main.o: main.c
gcc -c main.c
然后下面诉说的 main.o 是 我们的目标文件 main.c 是我们生成 main.o 所依赖的文件
gcc -c main.c

接下来 才是叙述我们的 关键问题
%.o : %.c
#命令
意思是 所有的.o 都依赖于 .c
这里所说的 gcc -c $<
$< 指的就是 如果 依赖文件是以模式(%) 定义的 那么就使用这其中的所有文件

objects = main.o input.o calcu.o
main: $(objects)
gcc -o main $(objects)

%.o : %.c
gcc -c $<

clean:
rm *.o
rm main
这就是 为什么式子是这么写的 如今豁然开朗

Makefile 伪目标
Makefile 有一种特殊的目标——伪目标,一般的目标名都是要生成的文件,而伪目标不
代表真正的目标名,在执行 make 命令的时候通过指定这个伪目标来执行其所在规则的定义的
命令。

.PHONY : clean
在执行 make 命令的时候通过指定这个伪目标来执行其所在规则的定义的
命令。
即使clean 并不在目录之下 ,也会执行 这样的 clean过程

上述代码第 5 行声明 clean 为伪目标,声明 clean 为伪目标以后不管当前目录下是否存在名为“clean”的文件,输入“make clean”的话规则后面的 rm 命令都会执行

Makefile 条件判断在 C 语言中我们通过条件判断语句来根据不同的情况来执行不同的分支,Makefile 也支持条件判断,

Makefile 函数使用
Makefile 支持函数,类似 C 语言一样,Makefile 中的函数是已经定义好的,我们直接使
用,不支持我们自定义函数。make 所支持的函数不多,但是绝对够我们使用了,函数的用法
如下:
$(函数名 参数集合)
或者
函数名参数集合可以看出,调用函数和调用普通变量一样,使用符号“ {函数名 参数集合} 可以看出,调用函数和调用普通变量一样,使用符号“ 函数名参数集合可以看出,调用函数和调用普通变量一样,使用符号”来标识。参数集合是函数的多
个参数,参数之间以逗号“,”隔开,函数名和参数之间以“空格”分隔开,函数的调用以
”开头。 1 、函数 s u b s t 函数 s u b s t 用来完成字符串替换,调用形式如下: ”开头。 1、函数 subst 函数 subst 用来完成字符串替换,调用形式如下: 开头。1、函数subst函数subst用来完成字符串替换,调用形式如下:(subst ,)此函数的功能是将字符串中的内容替换为
,函数返回被替换以后的字符串,比如如下示例:$(subst zzk,ZZK,my name is zzk)把字符串“my name is zzk”中的“zzk”替换为“ZZK”,替换完成以后的字符串为“my name is ZZK”。

2、函数 patsubst
函数 patsubst 用来完成模式字符串替换,使用方法如下:
$(patsubst ,, )
此函数查找字符串 中的单词是否符合模式,如果匹配就用来
替换掉,可以使用包括通配符“%”,表示任意长度的字符串,函数返回值就是替
换后的字符串。如果中也包涵“%”,那么中的“%”将是
中的那个“%”所代表的字符串,比如:
$(patsubst %.c,%.o,a.c b.c c.c)
将字符串“a.c b.c c.c”中的所有符合“%.c”的字符串,替换为“%.o”,替换完成以后
的字符串为“a.o b.o c.o”。
3、函数 dir
函数 dir 用来获取目录,使用方法如下:
$(dir <names…>)
此函数用来从文件名序列中提取出目录部分,返回值是文件名序列的目
录部分,比如:
$(dir </src/a.c>)
提取文件“/src/a.c”的目录部分,也就是“/src”。
4、函数 notdir
函数 notdir 看名字就是知道去除文件中的目录部分,也就是提取文件名,用法如下:
$(notdir <names…>)
此函数用与从文件名序列中提取出文件名非目录部分,比如:
$(notdir </src/a.c>)
提取文件“/src/a.c”中的非目录部分,也就是文件名“a.c”。
5、函数 foreach
foreach 函数用来完成循环,用法如下:
( f o r e a c h < v a r > , < l i s t > , < t e x t > ) 此函数的意思就是把参数 < l i s t > 中的单词逐一取出来放到参数 < v a r > 中,然后再执行 < t e x t > 所包含的表达式。每次 < t e x t > 都会返回一个字符串,循环的过程中, < t e x t > 中所包含的每个字符串会以空格隔开,最后当整个循环结束时, < t e x t > 所返回的每个字符串所组成的整个字符串将会是函数 f o r e a c h 函数的返回值。 6 、函数 w i l d c a r d 通配符“ (foreach <var>, <list>,<text>) 此函数的意思就是把参数<list>中的单词逐一取出来放到参数<var>中,然后再执行<text> 所包含的表达式。每次<text>都会返回一个字符串,循环的过程中,<text>中所包含的每个字 符串会以空格隔开,最后当整个循环结束时,<text>所返回的每个字符串所组成的整个字符 串将会是函数 foreach 函数的返回值。 6、函数 wildcard 通配符“%”只能用在规则中,只有在规则中它才会展开,如果在变量定义和函数使用时,通配符不会自动展开,这个时候就要用到函数 wildcard,使用方法如下: (foreach<var>,<list>,<text>)此函数的意思就是把参数<list>中的单词逐一取出来放到参数<var>中,然后再执行<text>所包含的表达式。每次<text>都会返回一个字符串,循环的过程中,<text>中所包含的每个字符串会以空格隔开,最后当整个循环结束时,<text>所返回的每个字符串所组成的整个字符串将会是函数foreach函数的返回值。6、函数wildcard通配符(wildcard PATTERN…)比如:$(wildcard *.c)上面的代码是用来获取当前目录下所有的.c 文件,类似“%”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/189663.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《前景导向的主动配电网智能储能软开关规划方法》

这个标题涉及到电力系统中的主动配电网&#xff08;Active Distribution Network&#xff09;以及与之相关的智能储能软开关的规划方法。下面是对标题中各个关键词的解释&#xff1a; 前景导向的&#xff08;Future-oriented&#xff09;&#xff1a; 这表明该方法是以未来发展…

球面的表面积

此推导需要用到重积分的知识&#xff0c;另外关于曲面的面积公式可以看我之前的博客

线性表,也是Java中数组的知识点!

线性表定义&#xff1a; 由n (n≥0)个数据特性相同的元素构成的有限序列称为线性表&#xff0c;(n0)的时候被称为空表。 线性表的顺序表示 线性表的顺序存储又被称为顺序表 优点 无需为表示表中元素之间的逻辑关系而增加额外的存储空间可以随意读取任意位置的元素 缺点 插入…

【Mybatis】预编译/即时sql 数据库连接池

回顾 Mybatis是一个持久层框架.有两种方式(这两种方式可以共存) 1.注解 2.xml 一.传递参数 以使用#{} 来接受参数为例 (以上两种方式一样适用的) 1)传递单个参数 #{} 可以为任意名称 2)多个参数 默认的参数名称就是接口方法声明的形参 3)参数为对象 默认给每个对象的每个属性都…

中海油“海安杯”一站到底知识竞赛真的很有特色

中海油“海安杯”一站到底知识竞赛规格高&#xff0c;赛制复杂&#xff0c;天纵知识竞赛系统为此次知识竞赛提供了软件支持。本次竞赛设置选手区和擂台区两个区域。比赛共分为五个轮次&#xff0c;五个轮次选手区所有参赛选手均需答题。 第一轮&#xff1a;“脱颖而出” 所有参…

ruoyi-plus-vue docker 部署

本文以 ruoyi-vue-plus 5.x docker 部署为基础 安装虚拟机 部署文档 安装docker 安装docker 安装docker-compose 配置idea环境 上传 /doicker 文件夹 到服务器&#xff1b;赋值 777权限 chmod -R 777 /docker idea构建 jar 包 利用 idea 构建镜像; 创建基础服务 docker…

深入了解 Pinia:现代 Vue 应用的状态管理利器

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

2017年11月16日 Go生态洞察:Go用户调查深度解析

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

CSDN助手:一键下载CSDN博客:高效保存,随时阅读

文章目录 &#x1f4d6; 介绍 &#x1f4d6;&#x1f3e1; 环境 &#x1f3e1;&#x1f4d2; 使用方法 &#x1f4d2;⚓️ 相关链接 ⚓️ &#x1f4d6; 介绍 &#x1f4d6; 这是我自己无聊的时候写的一个应用&#xff0c;以前UI有点丑&#xff0c;这次重写了一下UI 功能如下 …

使用VC++设计程序对一幅256级灰度图像进行全局固定阈值分割、自适应阈值分割

图像分割–全局固定阈值分割、自适应阈值分割 获取源工程可访问gitee可在此工程的基础上进行学习。 该工程的其他文章&#xff1a; 01- 一元熵值、二维熵值 02- 图像平移变换&#xff0c;图像缩放、图像裁剪、图像对角线镜像以及图像的旋转 03-邻域平均平滑算法、中值滤波算法、…

Linux python安装 虚拟环境 virtualenv,以及 git clone的 文件数据, 以及 下资源配置

根目录创建 venvs 文件夹 sudo mkdir /venvs 进入 /venvs 目录 cd /venvsp 创建虚拟环境&#xff0c;前提要按照 python3 安装 的 命令 sudo apt install python3 sudo python3 -m venv 虚拟环境名 激活虚拟环境 source /venvs/zen-venv/bin/activate 安装flask pip install fl…

Java + openCV更换证件照背景色

最近在小红书上看到很多更换证件照背景色的需求&#xff0c;联想到以前自己也更换过证件照背景色而且还是付费的&#xff0c;碰巧最近在看一本书《JavaOpenCV高效入门》&#xff0c;于是查找资料&#xff0c;找到了通过技术解决这个需求的办法。 先看效果图&#xff08;图片来自…

每日一题2023.11.26——个位数统计【PTA】

题目要求&#xff1a; 输入格式&#xff1a; 每个输入包含 1 个测试用例&#xff0c;即一个不超过 1000 位的正整数 N。 输出格式&#xff1a; 对 N 中每一种不同的个位数字&#xff0c;以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。…

设备树是什么?

设备树&#xff1a; 设备树DTS(Device Tree Source) 描述设备信息的独立的文件。 为什么要引入设备树&#xff1f; 随着芯片的发展&#xff0c;Linux内核中就包含着越来越多这些描述设备的代码&#xff0c;导致Linux内核代码会很臃肿。因此引入了设备树文件&#xff0c;从…

Runloop解析

RunLoop 前言 ​ 本文介绍RunLoop的概念&#xff0c;并使用swift和Objective-C来描述RunLoop机制。 简介 ​ RunLoop——运行循环&#xff08;死循环&#xff09;&#xff0c;它提供了一个事件循环机制在程序运行过程中处理各种事件&#xff0c;例如用户交互、网络请求、定…

前端review

关于实时预览vs code中的颜色代码需要安装的插件&#xff0c;包括html文件格式中的颜色代码安装Flutter Color插件 VSCode 前端常用插件集合 1.Auto Close Tag自动闭合HTML/XML标签 2.Auto Rename Tag自动完成另一侧标签的同步修改 3.Beautify格式化代码&#xff0c;值得注…

Python武器库开发-前端篇之html概述(二十八)

前端篇之html概述(二十八) html概述 HTML5是构建Web内容的一种语言描述方式。HTML5是互联网的下一代标准&#xff0c;是构建以及呈现互联网内容的一种语言方式&#xff0e;被认为是互联网的核心技术之一。HTML产生于1990年&#xff0c;1997年HTML4成为互联网标准&#xff0c;…

斐讯K2结合Padavan实现锐捷认证破解方法

前言 众所周知&#xff0c;校园网在传统模式下是不能直接插路由使用的&#xff0c;但苦于校园网只能连接一台设备的烦恼&#xff0c;不得不“另辟蹊径”来寻求新的解决路径&#xff0c;这不&#xff0c;它来了&#xff0c;它来了&#xff0c;它带着希望走来了。 本文基于斐讯…

基于Haclon的图形镜像案例

项目要求&#xff1a; 图为HALCON的例图“green-dot”&#xff0c;请将其中的圆形图案按水平和垂直两个方向分别进行镜像。 项目知识&#xff1a; 首先要用BLOB分析的方法&#xff0c;得到圆形图案的目标区域&#xff0c;再对其进行镜像。 在HALCON中与镜像相关的算子为mirr…

Android平台GB28181设备接入模块开发填坑指南

技术背景 为什么要开发Android平台GB28181设备接入模块&#xff1f;这个问题不再赘述&#xff0c;在做Android平台GB28181客户端的时候&#xff0c;媒体数据这块&#xff0c;我们已经有了很好的积累&#xff0c;因为在此之前&#xff0c;我们就开发了非常成熟的RTMP推送、轻量…