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

凡科网站是什么做的做网站需要宽带

凡科网站是什么做的,做网站需要宽带,做印刷哪个网站好,WordPress优化百度广告文章目录 零、Linux简介1.配置环境2.Linux历史3.Linux模型 一、vim二、Linux命令行 (shell命令)1.常用命令与快捷键(1)常用命令①man命令#xff1a;查看帮助手册 (2)快捷键 2.用户子系统(1)Linux用户(2)用户命令 3.文件子系统命令(1)目录命令1.创建文件#xff1a;mkdir2.删… 文章目录 零、Linux简介1.配置环境2.Linux历史3.Linux模型 一、vim二、Linux命令行 (shell命令)1.常用命令与快捷键(1)常用命令①man命令查看帮助手册 (2)快捷键 2.用户子系统(1)Linux用户(2)用户命令 3.文件子系统命令(1)目录命令1.创建文件mkdir2.删除目录rmdir3.打印当前工作目录pwd4.切换当前工作目录cd5.复制cp6.重命名/移动文件mv7.删除文件和目录rm8.查看文件的目录项ls9.查看文件和目录所占用的磁盘空间du10.列出文件目录项结构tree11.别名alias (2)文件命令1.创建文件echo、touch、vim2.查找文件which3.查找文件find4.查看文件内容/拼接文件cat5.查看文件的前几行head6.查看文件的后几行tail7.分页浏览more、less8.搜索文件内容grep9.单词统计wc (word count)10.命令的组合3种(1)多命令 ;(2)管道(pipe) |(3)xargs将cmd1输出的每一行作为cmd2的命令行参数 11.文件的权限chmod (change mode)12.文件创建掩码umask13.链接硬链接和符号链接14.远程复制scp15.打包和压缩tar (text archive) (3)通配符、正则表达式、重定向 三、编译工具链1.编译(1)下生成可执行程序的整个过程(2)对应的 gcc 命令如下(3)条件编译 2.GDB调试(1)调试程序(2)coredump文件 (核心转储) 3.Makefile6.完整的Makefile / makefile7.非常通用的Makefile模板 4.库文件(1)静态库(2)动态库(3)库的生成 四、其他1.修改代码模板snippet.c2.小知识储备 零、Linux简介 1.配置环境 0.安装unbuntu 1.静态IP地址手动设置ip地址 instal net-tools 2.设置远程连接 网络协议SSH sudo apt install ssh3.安装vimplus 4.关闭主机前先关闭虚拟机。否则会虚拟机损坏。 5.设置快照 6.daemon 守护进程 / 也是虚拟光驱软件 7.Linux哲学 ①一切皆文件 ②没有消息就是最好的消息 (一般显示的消息是报错) 2.Linux历史 Unix → M → Linux 3.Linux模型 1.内核(Kernel) ①管理硬件资源CPU(进程调度)、内存(内存管理)、外部设备(文件管理、网络通信、设备驱动) ②对上层应用程序提供接口(API)即系统调用 2.系统调用(System calls)内核给上层应用程序提供的接口 3.库函数(library function)对系统调用的包装①方便使用 ②可移植性(不同操作系统的底层系统调用是不同的) 4.shell命令行解释器 shell 是一个命令行解释器它读取用户输入然后执行命令然后等待用户的下一 次输入 for(;;) {read(cmd);execute(cmd); }命令一般来说就是一些简单的可执行程序。 脚本命令的集合 一、vim 1.理念 ①组合 ②简单、快捷 2.vim是多模式编辑器 ①普通模式/命令模式 (NORMAL)查看代码最常待的模式 ②编辑模式/插入模式 (INSERT)编辑文本 ③视图模式 (VISUAL / V-BLOCK)v 行选crtl v 列选 3.NORMAL模式命令 ①短命令a,i,A,I,o,O,v, crtlv ②底部命令以:开头以[Enter]结尾 :wq ③其他模式按[Esc]返回NORMAL模式 4.移动光标 (motion) 命令含义j下k上h左l右i在光标前面插入I在行首插入a在光标后面插入A在行尾插入o下面另起一行在行首插入O上面另起一行在行首插入[n]-上移n行[n]下移n行[n]G移动到第n行:n移动到第n行gg文首G文末0跳到行首^本行第一个非空白字符$行尾w下一个单词的词首W下一个词的词首以空白字符分割b上一个单词的词首B上一个词的词首以空白字符分割t往后查找光标置于该字符的前一个字符T往上查找光标置于该字符的后一个字符f向后查找光标置于该字符F向前查找光标置于该字符x删除一个字符X删除前一个字符r替换一个字符 5.文本对象 (text object) 删除双引号内ci“ca” ap (paragraph)整段以空行为分割 ①复制整段yap ②删除整段dap、cip a (all)包括边界 i (inside)不包括边界 6.动作 (action) d (delete) 删除 y (yank) 复制 c (change) 删除并进入编辑模式 c change模式直接进入插入模式 gcc注释/取消注释 7.组合 (1)action motion dw、d$、d0 cgg光标删除到文首并进入插入模式 cw删除后面的单词并进入插入模式 (2)n命令某个命令做n次 (3)action text object 8.撤销与恢复 u (undo)撤销 [crtl] r (recovery)恢复 p向后粘贴 P向前粘贴 yy复制 多个历史版本两个栈实现前进后退 9.查找与替换 10.视图模式 选择范围为了后面复制或删除 批量注释ctrl v 选择范围按gc 11.最小前缀原则唯一识别只写部分前缀即可。或者别名。 :w 就是 :write的缩写保存(内存写回磁盘)。也可写:wri :q 就是 :q的缩写:q!是强制退出 :wq 是 保存并退出 12.多窗口 / 分屏 :sp水平分屏 :vsp垂直分屏 :q 退出当前窗口 :only 除了当前窗口退出其他窗口 :w 保存 13.配置vim ①配置文件.vimrc (是一个脚本rc是running command) ②安装vimplus ③再单独装ycm (you complete me) rm -rf ~/.vim/plugged/YouCompleteMe sudo apt install vim-youcompleteme vim-addons install youcompleteme二、Linux命令行 (shell命令) 1.常用命令与快捷键 (1)常用命令 命令含义clear清屏touch创建文件ls -a全部显示包括.开头的隐藏文件rm清除rm * -rfecho “I love xixi” b.txt写入文件cat 文件名 (cat main.c)查看文件内容执行程序gcc main.c -o main ./mainshutdown命令关机命令reboot重启man 命令名manual手册解释该命令 (be a man!)gg G全文对齐env查看环境变量 gccgnu c compiler ①man命令查看帮助手册 1.man手册看哪些部分 (一手资料) 2.man手册的快捷键 (1)翻页 ↑、↓、f、b、d、u ↓往下一行 d(down)往下翻半页 f(forward)往下翻一页 ↑往上一行 u(up)往上翻半页 b(backward)往上翻一页 (2)查找/内容 查找下一个n 查找上一个N (3)退出q 3.man手册的数值的含义 ①shell命令 ②系统调用 ③库函数 man 3 rmdir4.man手册 (manual) 短选项命令行 长选项shell脚本 (2)快捷键 快捷键功能Tab联想命令补全↑上一条命令Ctrl A将光标移动到最前面Ctrl E将光标移动到最后面 2.用户子系统 (1)Linux用户 (1)root根用户超级用户 (2)sudoers管理员用户。安装ubuntu时创建的用户默认为sudoers。sudoers可以使用sudo命令临时提升权限为root (3)普通用户 (2)用户命令 (1)创建用户 useradd (2)删除用户 userdel sudo userdel 用户名 -r #加-r,不仅删除用户,还将用户主目录中的文件和用户邮箱一起删除(3)设置密码、修改用户密码 passwd sudo passwd 用户名(4)切换用户 su (5)退出切换 exit 例题 (填写执行的命令即可) a. 创建 test1 用户指定 test1 用户的 login shell 为 /bin/bash, 并给他创建家目录。 b. 将 test1 用户的密码修改为 123456 (或其它任意密码) c. 切换到 test1 用户 d. 退出切换 e. 将 test1 用户删除家目录也一起删除 a.sudo useradd test1 -m -s /bin/bash b.sudo passwd test1123123 c.sudo su test1 d.exit e.sudo userdel test1 -r 3.文件子系统命令 1.目录结构 根目录 / binbinary可执行程序或脚本文件 syssystem系统相关文件 devdevice设备文件 procprocess进程相关的数据 varvariable经常发生变化的文件比如日志文件 lib库文件 root超级用户 home家目录下面是普通用户 etc存放配置文件和启动脚本 ①passwdman 5 passwd ②shadowman 5 shadow etc/passwd存放账号 etc/shadow存放密码 (1)目录命令 1.创建文件mkdir mkdir - p 创建文件 (-p是级联创建) 2.删除目录rmdir rmdir -p 删除空目录 (-p是级联删除) 3.打印当前工作目录pwd 4.切换当前工作目录cd ①. 当前目录 ②… 上级目录 ③/ 根目录 ④~ 家目录 ⑤- 上次目录环境变量 OLDPWD cd 是 change directory 5.复制cp (1)常用格式 cp src des #复制文件 cp -r src des #递归复制目录 cp src1 src2 .. des #拷贝多个文件到目标目录(2)常用选项 -r递归 -n不覆盖 (des不存在则创建。若存在则不复制) -i 交互询问 6.重命名/移动文件mv (1)常用格式 ①重命名 mv会默认覆盖同名文件 mv 文件名1 文件名2inode不变 虚拟文件系统 ②移动文件 mv 文件名 目录名(2)常用选项 -n不覆盖 -i交互式 7.删除文件和目录rm rm(remove)命令可以删除文件和目录。 rm -rf dir①rm -r 递归删除 (-r 是recursively递归地) ②-i交互式 ③-fforce强制执行不给提示。-f 强制不给消息。有些用户不想看消息不想交互就用-f默默地强制执行。 8.查看文件的目录项ls ls -l查看目录项 (1)常用选项 ①-l长格式详细信息 ②ls -a显示所有内容包括 .和…、隐藏文件 ③-h人类可读的 ④-i物理inode编号 (2)读写权限 ①可执行程序775 rwx rwx r-x (八进制r w x 分别值为4 2 1 ) ②普通文件664 rw- rw- r– ③7列九个字符(三组)表示权限、硬链接数、拥有者、拥有组、文件大小、最近修改时间、文件名 ls 目录名 #显示指定目录的内容9.查看文件和目录所占用的磁盘空间du du是 disk usage 的缩写。 当使用ls -lih时目录大小永远只显示4K而无法递归地显示目录的真实大小这时候就要使用du命令。 du -sh 路径10.列出文件目录项结构tree 11.别名alias ①查看别名alias ②设置别名alias h‘history’ (2)文件命令 1.创建文件echo、touch、vim ①echo输入简短内容不存在则创建已存在则覆盖。echo hello Linus a.txt ②touch文件存在修改时间戳文件不存在创建空文件 ③vim编辑文件 2.查找文件which which查找文件 (查找可执行程序即查找命令) which 可执行程序名 which 可执行程序名 -a (遍历完PATH)which是通过PATH环境变量查找目录路径 3.查找文件find 3.find查找文件 (在目录中递归地查找) find . -name a.txt根据时间查找 -mtime 1 #1到2天内 -mtime 1 #2天前 -mtime -1 #0到1天内4.查看文件内容/拼接文件cat 4.cat ①看文件内容 cat -n 带行号 ②拼接文件 cat text1 text2 text3 5.查看文件的前几行head head -n 5 #只查看前5行 head -n -5 #除了后5行,都显示6.查看文件的后几行tail tail -n 5 tail -n 5 tail -F #实时显示文件追加的内容(如日志文件)7.分页浏览more、less 1.more分页浏览 b、f或空格翻页 2.less分页浏览 (more的升级版) 可以上下滚轮 8.搜索文件内容grep grep (globally search for a regular expression)命令可以用于搜索文件内容 grep -nE pattern 文件名①-E扩展功能(建议都加) ②-n行号 ③-i忽略大小写 ④-c显示匹配了多少行的数量 例题 搜索 Linux 内核源码中包含调用 exit 函数的所有行。 grep -nE \exit\(.*\) linux-6.9 -r #问题 *会多匹配内容遇到)不结束 grep -nE \exit\([^)]*\) linux-6.9 -r #问题[^)]在遇到第一个)就结束。但是 exit() 的()中可能还有()9.单词统计wc (word count) wc 文件名行数 单词数 字节数 文件名 ①wc -l 统计行数 10.命令的组合3种 (1)多命令 ; cmd1 ; cmd2先执行cmd1再执行cmd2。如mkdir dir ; cd dir (2)管道(pipe) | 1.管道cmd1的输出 作为 cmd2的输入 cmd1 | cmd22.原理将cmd1的stdout 重定向 到 管道的写端将cmd2的stdin 重定向 到 管道的读端 3.示例 history | wc -l #得到1000(3)xargs将cmd1输出的每一行作为cmd2的命令行参数 (1)格式 cmd1 | xargs cmd2(2)原理 ①将cmd1的stdout 重定向 到 管道的写端将cmd2的stdin 重定向 到 管道的读端 ②xargs将stdin里的每一行 作为 命令行参数 (3)示例 find . -name *.c | xargs grep -nE \main\(11.文件的权限chmod (change mode) 目录 r查看目录项 (ls、tree) w添加和删除目录项 x目录最基本的权限。若没有x权限则不能r和w。不能cd到该目录。 (1)模型 目录文件的模型 目录项以链表互相连接 (2)命令 ①文字设定法 chmod [ugoa][±-][rwx] filename ②数字设定法 chmod mode filename chmod 755 client //数字设定法 chmod 664 a.txt //数字设定法 chmod ax hello.py //文字设定法12.文件创建掩码umask 想去掉的权限 13.链接硬链接和符号链接 (1)硬链接 (hard link) ①原理 i.共享inode结点 ii.引用计数。每增加一个硬链接引用计数1引用计数为0才会真正删除文件。修改任意一个文件的内容所有共享引用计数的文件内容都会改变。 ②命令ln (link) ③格式也是 - 普通文件 ln a.txt link_a(2)符号链接 /软连接 (symbolic link) ①命令ln -s ②可以指向一个不存在的文件大小为指向的路径名 ③格式是 l ④类似C语言的指针、Windows的快捷方式。除了rm命令符号链接可以解引用修改软连接的内容原内容也会修改。 ln -s b.txt link_b14.远程复制scp 上传将本地的文件复制到远程 下载将远程的文件复制到本地 远程路径用户名IP:绝对路径 递归复制目录要加 -r scp ./file edward192.168.248.136:~/MyCode/cpp58/Linux/Linux04非常实用以后互相传文件不需要通过微信了。windows给ubuntu传文件也不需要通过WinSCP了。 15.打包和压缩tar (text archive) (1)选项不加- vf常用 c打包(创建包裹)默认包裹名结尾 .tar r追加 tvf 查看包裹内容 x解打包 加z即使用gzip算法进行压缩或解压缩。默认文件结尾 .tar.gz tar xvf linux-6.9.tar.xz #解压命令若是.zip需要使用unzip 包裹名命令 (3)通配符、正则表达式、重定向 1.通配符匹配文件名字 *匹配任意多个字符 (0-n个) ?匹配任意一个字符 集合/类[cha]匹配集合内任意一个字符[!cha]匹配集合外任意一个字符 例如[abc]、[0-9]、[0-9a-zA-z_]、[!0-9a-zA-z_] 2.正则表达式匹配文件内容 (1)基本单位 ①普通字符 ②转义字符 ③.匹配任意一个字符 ④集合[abc] ⑤group(abc) (2)基本操作 ①连接 ②重复前一个基本单位重复的次数 (3)指定基本单位出现的位置 ①^行首“^abc” ②$行尾“xyz$” ③\词首 ④\词尾 [^abc]匹配除了 “a”、“b”、和 “c” 之外的任何单个字符 .*任意字符重复任意次 3.重定向 三、编译工具链 前面我们写程序的时候用的都是集成开发环境 (IDE: Integrated Development Environment)集成开发环境可以极大地方便我们程序员编写程序但是配置起来也 相对麻烦。在 Linux 环境下我们用的是编译工具链又叫软件开发工具包(SDK: Software Development Kit)。Linux 环境下常见的编译工具链有GCC 和 Clang我 们使用的是 GCC。 1.编译 gcc、g分别是 gnu 下的 c 和 c 编译器。 $ sudo apt install gcc gdb g #安装gcc和gdb $ gcc -v #查看gcc的版本(1)下生成可执行程序的整个过程 (2)对应的 gcc 命令如下 gcc -E hello.c -o hello.i #-E 预处理,生成 预处理后的文件 gcc -S hello.c -o hello.s #-S 预处理编译,生成 汇编代码 gcc -c hello.c -o hello.o #-c 预处理编译汇编生成 目标文件 gcc hello.c -o hello #什么都不加,生成 可执行程序 gcc hello.c -o hello -l库名 #-l 链接库 选项含义-Wall生成所有警告信息 (warning all)-g调试-Dmacro相当于在文件开头加上了 #define macro-Dmacrovalue相当于在文件开头加上了 #define macro valueIdir指定#include头文件的优先查找的目录找不到再到当前目录、系统的include目录查找-O0,-O1,-O2,-O3-O0不优化(开发环境)-O1和-O2(生产环境)-O3是激进的优化策略(一般不使用)Optimize (3)条件编译 1.条件编译的3种预处理指令 ①#if #if 常量表达式 ... #endif(2)#if defined(macro) #if defined(DEBUG) ... #endif②#ifdef 是上文的语法糖 #ifdef DEBUG ... #endif③#ifndef #ifndef 标识符 ... #endif2.条件编译的作用/适用场景 (1)编写可移植的代码 #ifdef WIN32 ...Windows的代码块 #elif MAC_OS ... #elif LINUX ... #endif(2)为宏提供默认定义 我们可以检测一个宏是否被定义了如果没有则提供一个默认的定义 #ifndef MAXSIZE #define MAXSIZE 4096 ... #endif(3)避免头文件重复包含 第一次碰到该宏会定义该宏并执行代码块。 第二次碰到该宏因为已经定义过该宏会跳过代码块。 宏的命名就是为了标识该头文件。 #ifndef __WD_FOO_H //若没有定义过该宏则定义该宏 #define __WD_FOO_H //下次再碰到就已经定义了该宏会直接跳过 ... #endif#ifndef _HELLO_H_ #define _HELLO_H_ ... #endif(4)调试程序临时屏蔽包含注释的代码 2.GDB调试 1.观念调试程序的难度是写程序的两倍 2.调试程序的步骤调试程序要 [走一走停一停看一看]。看程序的状态是否和预期的一致。(调试程序之前一定要有预期) 若不一致 i.预期错了加深对问题的理解 ii.程序错了线索指向真正出错的地方 (1)调试程序 0.记得加-g选项才能gdb。否则会显示没有符号表(no symbol table)被读取。请使用 file 命令。 gcc hello.c -o hello -g [-Wall]1.进入GDB调试界面的两种方式 gdb executable_name #不设置任何命令行参数 gdb --args executable_name arg1 arg2 ... #设置命令行参数2.查看源代码 list但是更建议再开一个窗口用vim 2.设置命令行参数 (gdb) set args arg1 arg2 ...3.打断点break/b n (gdb) break 20 # 在第20行设置断点 (gdb) break main # 在main函数的开头设置断点 (gdb) break scanner.c:20 # 在scanner.c文件的第20行设置断点 (gdb) break scanner.c:scanToken # 在scanner.c文件的scanToken函数开头设置断点4.查看断点info break/ i b 5.删除断点delete 断点编号 (gdb) delete 2 #删除2号断点 (gdb) d #删除所有断点6.执行程序run/r 7.逐过程/步过next/n 遇到函数调用它不会进入函数而是把函数调用看作一条语句。 8.单步调试 (逐语句/步入)step/s 遇到函数调用会进入函数里面 9.跳出函数(步出)finish 执行完当前被调函数回到主调函数。(原理执行完栈顶的栈帧并出栈然后停下) 10.继续continue/c 执行到逻辑上的下一个断点 11.忽略断点ignore 我们可以用 ignore 命令来指定忽略某个断点多少次这在调试循环的时候非常有用 格式: ignore N COUNT 常见用法: ignore 1 10 #忽略1号断点10次12.退出GDB界面qiut/q 看一看 [查看程序的状态]print EXP、display EXP、info display、undisplay 编号、backtrace、frame 栈帧编号、info args、info locals、info registers 13.监视 (1)打印表达式的值print/p 表达式 print/p EXP print/p EXPvalue(2)自动展示表达式的值display display EXP #自动展示EXP info display #显示所有自动展示的表达式信息 undisplay [n] #删除所有或[n]号自动展示的表达式14.查看内存 x/4xb arr5 x/1dw arr5 #查看值 x/10dw arr #数组的值15.GDB帮助手册help 要查看的命令 (2)coredump文件 (核心转储) 1.core文件 (1)是什么程序异常终止时的运行状态的快照 (程序及内存) (2)为什么需要作用一定能实现错误复现因为core文件保存了当时内存崩溃的场景core文件可以恢复场景。 多线程的错误很难还原在生产环境下的程序可能每次运行结果都不同。不一定能复现而core文件就可以用来复现错误 2.开启生成core文件 (1)查看系统是否允许生成Coredump文件 $ ulimit -a #查看 ... core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited ... $ ulimit -c unlimited #将core文件的大小临时设置为不受限制(2)设置Coredump文件的格式 $ sudo vim /etc/sysctl.conf kernel.core_pattern %e_core_%s_%t #%e:executable-name,%s:signal,%t:timestamp $ sudo sysctl -p #让配置生效(3)使用Coredump文件调试程序 ①查看信号异常终止的数字对应的宏kill -l (list) ②用GDB查看core文件复现错误 $ gcc test.c -o test -g # 生成可执行程序test $ ./test # 运行test #报错了,并生成了core文件,可使用ls命令查看生产的core文件名 $ gdb test test_core_8_1679196427 # 使用Coredump文件调试程序:gdb 可执行程序名 core文件名③查看栈backtrace/bt ④查看栈帧frame n ⑤查看传递的参数的值info args ⑥查看局部变量的值lnfo locals ⑦查看寄存器的 值info registers 普通GDB也可以查看 info args、info locals并不一定需要有core文件 3.Makefile 1.Makefile是什么 (what) Makefile脚本文件 make工具解释并执行Makefile 2.Makefile的作用 (why) (1)自动编译写好 Makefile 之后输入一个 make命令就可以构建整个项目了自动进行编译。 (2)增量编译Makefile只编译新增的和修改过的.c文件 (-c生成.o文件) 不需要全量编译全量编译需要若干个小时。 编译很慢链接很快。核心是.o目标文件 3.书写Makefile how 特点Makefile的语法要求非常严格 main: main.o add.o sub.o mul.o div.ogcc main.o add.o sub.o mul.o div.o -o main main.o: main.c algs.hgcc -c main.c -Wall -g add.o: add.c algs.hgcc -c add.c -Wall -g sub.o: sub.c algs.hgcc -c sub.c -Wall -g mul.o: mul.c algs.hgcc -c mul.c -Wall -g div.o: div.c algs.hgcc -c div.c -Wall -g规则目标依赖命令 4.Makefile的工作原理 (1)通过有向无环图(DAG)来管理依赖 make [目标]若不指定目标则自动选择第一个target作为目标。 make 伪目标才会走.PHONY里的 (2)拓扑排序 ①保证了依赖关系 ②使用DFS对DAG进行拓扑排序 5.伪目标 每次都能执行的命令但不生成文件 .PHONY: clean rebuild #一定执行 clean:rm -rf *.o amin rebuild: clean main6.完整的Makefile / makefile main: main.o add.o sub.o mul.o div.ogcc main.o add.o sub.o mul.o div.o -o main main.o: main.c algs.hgcc -c main.c -Wall -g add.o: add.c algs.hgcc -c add.c -Wall -g sub.o: sub.c algs.hgcc -c sub.c -Wall -g mul.o: mul.c algs.hgcc -c mul.c -Wall -g div.o: div.c algs.hgcc -c div.c -Wall -g.PHONY: clean rebuild clean:rm -f main main.o add.o sub.o mul.o div.o rebuild: clean main其对应的源码 // algs.h #ifndef __WD_ALGS_H #define __WD_ALGS_Hint add(int, int); int sub(int, int); int mul(int, int); int div(int, int);#endif // add.c #include algs.hint add(int a, int b) {return a b; } // sub.c #include algs.hint sub(int a, int b) {return a - b; } // mul.c #include algs.hint mul(int a, int b) {return a * b; } // div.c #include algs.hint div(int a, int b) {return a / b; } // main.c #include algs.h #include stdio.hint main(int argc, char* argv[]) {printf(add(7,3) %d\n, add(7,3));printf(sub(7,3) %d\n, sub(7,3));printf(mul(7,3) %d\n, mul(7,3));printf(div(7,3) %d\n, div(7,3));return 0; }使用Makefile编写shell脚本 make、make clean、make build test: test.ogcc test.c -o test #编译链接./test #执行程序.PHONY: clean rebuild clean:rm test test.o rebuild: clean test7.非常通用的Makefile模板 Srcs : $(wildcard *.c) Outs : $(patsubst %.c, %, $(Srcs))CC : gcc CFLAGS -Wall -g -pthreadALL: $(Outs) %: %.c$(CC) $ -o $ $(CFLAGS).PHONY: clean rebuild ALLclean:$(RM) $(Outs) rebuild: clean ALL8.变量 (1)变量在声明时需要赋初始值使用时需要给在变量名前加上$符号如果变量名包含 多个字符我们应该用小括号 () 或大括号 {} 把变量括起来。 (2)使用变量改写上文的Makefile Objs : main.o add.o sub.o mul.o div.o Out : main$(Out): $(Objs)gcc $(Objs) -o $(Out) main.o: main.c algs.hgcc -c main.c -Wall -g add.o: add.c algs.hgcc -c add.c -Wall -g sub.o: sub.c algs.hgcc -c sub.c -Wall -g mul.o: mul.c algs.hgcc -c mul.c -Wall -g div.o: div.c algs.hgcc -c div.c -Wall -g.PHONY: clean rebuild clean:rm -f $(Out) $(Objs) rebuild: clean $(Out)(3)预定义变量 使用预定义变量改写上文的Makefile Objs : main.o add.o sub.o mul.o div.o Out : main CC : gcc CFLAGS : -Wall -g$(Out): $(Objs)$(CC) $(Objs) -o $(Out) main.o: main.c algs.h$(CC) -c main.c $(CFLAGS) add.o: add.c algs.h$(CC) -c add.c $(CFLAGS) sub.o: sub.c algs.h$(CC) -c sub.c $(CFLAGS) mul.o: mul.c algs.h$(CC) -c mul.c $(CFLAGS) div.o: div.c algs.h$(CC) -c div.c $(CFLAGS).PHONY: clean rebuild clean:$(RM) $(Out) $(Objs) rebuild: clean $(Out)(4)规则中的特殊变量 引入自动变量后我们可以将上面的 Makefile 改写成 Objs : main.o add.o sub.o mul.o div.o Out : main CC : gcc CFLAGS : -Wall -g$(Out): $(Objs)$(CC) $^ -o $ main.o: main.c algs.h$(CC) -c $ $(CFLAGS) add.o: add.c algs.h$(CC) -c $ $(CFLAGS) sub.o: sub.c algs.h$(CC) -c $ $(CFLAGS) mul.o: mul.c algs.h$(CC) -c $ $(CFLAGS) div.o: div.c algs.h$(CC) -c $ $(CFLAGS).PHONY: clean rebuild clean:$(RM) $(Out) $(Objs) rebuild: clean $(Out)9.模式规则 模式规则%.o : %.c表示的含义是所有的.o文件依赖于对应的.c文件。 下面示例就是 Makefile 的一个模式规则由所有的.c文件生成对应的.o文件 %.o: %.c$(CC) -c $ -o $有了模式规则后我们可以这样写 Makefile Objs : main.o add.o sub.o mul.o div.o Out : main CC : gcc CFLAGS : -Wall -g$(Out): $(Objs) #Objs : main.o add.o sub.o mul.o div.o$(CC) $^ -o $ %.o: %.c algs.h #这里应用了Makefile的隐式推导%.o是与上一个规则的依赖进行匹配即$(Objs)$(CC) -c $ $(CFLAGS).PHONY: clean rebuild clean:$(RM) $(Out) $(Objs) rebuild: clean $(Out)10.内置函数 (1)通配符函数 (2)模式替换函数 4.库文件 库文件是目标文件(*.o)的集合 静态库动态库Windows.lib.dllLinux.a.so (1)静态库 静态库链接阶段将库代码嵌入可执行程序合为一体 优点移植方便程序运行时与静态库再无瓜葛。当链接好静态库后即使静态库坏了、没了依然不影响已生成的程序的执行。 缺点①浪费空间每个进程都有一份静态库的副本 ②对程序更新部署发布不友好当静态库更新时所有用户都需要重新下载安装的可执行程序。 (2)动态库 动态库对函数的链接是在运行时完成的 优点①节省内存空间动态库可以被多个进程共享 动态库(dynamic library)又称为共享库(shared library) ②对程序的更新部署发布友好只需要更新动态库就好了 缺点程序运行时依赖动态库移植不方便 (3)库的生成 1.生成静态库 ar crsv lib库名.a add.o sub.o mul.o div.o #静态库打包,用archive sudo mv lib库名.a /usr/lib gcc main.c -o main -l库名 #需要加-l选项,链接库2.生成动态库 gcc -c *.c -fpic #生成动态库的目标文件要加-fpic gcc -shared *.o -o libalgs.so #打包生成共享库用gcc sudo mv libalgs.so /usr/lib #移动到系统的库目录下 gcc main.c -o main -l库名 #同名的静态库和动态库都存在时,默认加载动态库3.修改版本 libalgs.so当作一个符号链接其他的带版本号是真的动态库 sudo ln -s libalgs.so.001 libalgs.so #这样libalgs.so就仅仅只是一个符号链接四、其他 1.修改代码模板snippet.c vim ~/.vim/plugged/prepare-code/snippet/snippet.c2.小知识储备 1.字段与字段之间以冒号:分隔 2.Windows回收站 其实是一个文件夹Windows的删除其实是mv操作。Linux没有回收站。 3.脚本 Python脚本
http://www.tj-hxxt.cn/news/224308.html

相关文章:

  • wap手机网站制作可以做问卷的网站
  • 电子商务网站建站目的网页设计找什么工作
  • 大连城市建设管理局网站现在的网络推广怎么做
  • 怎么创一个网站爱站seo
  • 什么样的网站是php网站怎么查看网站是否被收录
  • 卫计网站建设工作总结wordpress微博图床怎么用
  • 音乐播放网站怎么做wordpress怎么加站点图标
  • 品牌网吴为简介seo内部优化方案
  • 企业手机网站建设报价手机网站模版免费下载
  • 申请免费网站企业建设网站能否报销
  • 网站开发房源岗位西安免费网络
  • 机加工网站织梦教育网站开发
  • 驻马店网站建设电话阿里巴巴网官方网站
  • html5网站价格网站数据库开发
  • 重庆本地网站论坛有哪些毕节地区建设网站
  • 企业网站设计网站提示网站正在建设中
  • 广东专业移动网站建设哪家好美食网站建设内容规划
  • 网站怎么做导航天元建设集团电话
  • 外包网站平台哪个网站上做ppt比较好看的
  • 网站建设成本计划网站建设构架
  • php 免费企业网站网络营销与直播电商好就业吗
  • wordpress中文站网站制作的步骤
  • 健康类网站模板网址的格式是什么样的
  • 建设咨询网站电商创业怎么做
  • 网站怎么做uc整合php主做哪种类型网站
  • 要做网站到哪里做排名轻松seo 网站推广
  • 上海做网站报价网络建设上市公司排名
  • 建个网站多少钱百度网站免费优化软件下载
  • 石家庄手机网站制作济南学习网站制作
  • 成都网站建设招聘阜新旅游网站建设