目录
Linux项目自动化构建工具-make/Makefifile
这里还是权限问题,普通用户收到权限的限制,如果是root用户,那么我们就可以直接下载了。
Linux下使用yum来安装都可以用这条指令:yum install +你所需要的工具(其实也是指令)
在这种情况下,我们就已经联网成功。
通过指令:sudo yum remove lrzsz即可卸载
下面简单的使用一下vim这个工具:
输入i即可写代码
通过esc退回到命令模式,之后shitf+:进入底行模式,输入wq即可退出并保存
通过cat查看我们写过的代码:
退出时的一些选项:
: w (保存当前文件)
: wq (输入「wq」,存盘并退出vim)
首先先讲讲命令行的意义:提高编程效率。
移动光标(常用)vim 可以直接用键盘上的光标来上下左右移动,但正规的 vim 是用小写英文字母h,j ,k,l,分别控制光标左、下、上、右移一格方便记忆:h和l分别在键盘的左右,就是左右,然后j是jump的意思,那就是向下跳,就向下。k是king的意思,王肯定是高高在上的,所以是上的意思。按「 G 」:移动到文章的最后按「 $ 」:移动到光标所在行的 “ 行尾 ”按「^」:移动到光标所在行的 “ 行首 ”按「 w 」:光标跳到下个字的开头按「e」:光标跳到下个字的字尾按「b」:光标回到上个字的开头按「 #l 」:光标移到该行的第 # 个位置,如: 5l,56l按[ gg ]:进入到文本开始按[ shift + g ]:进入文本末端
u是撤销命令。ctrl+r是取消u的操作
与文本复制有关的操作:光标所在行:nyy复制光标所在行的n行np支持粘贴n行的作用(n = 1)是特殊情况ndd删除n行ndd+p就是剪切作用
列出行号「 set nu 」 : 输入「 set nu 」后,会在文件中的每一行前面列出行号跳到文件中的某一行「#」 : 「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字 15, 再回车,就会跳到文章的第15 行替换操作:%s+要替换的内容+你想换的内容+g光标的意义:选中的行和屏幕 光标跨屏操作:ctrl+ww那怎么开出另一个屏幕呢?我们只要使用 vs 你想要的打开的文件即可。例如:vs copy.c
一开始linux下的vim是很难使用的,很不方便,这时候我们就需要去配置vim,让我们的vim更加方便的编译。
没有就自己创建出来然后就是配置了;
通过打开.vimrc来写入set nu即可输出行数,效果如下:
常用配置选项,用来测试
预处理 ( 进行宏替换 )预处理功能主要包括宏定义 , 文件包含 , 条件编译 , 去注释等。预处理指令是以 # 号开头的代码行。实例 : gcc –E hello.c –o hello.i选项 “-E”, 该选项的作用是让 gcc 在预处理结束后停止编译过程。选项 “-o” 是指目标文件 ,“.i” 文件为已经过预处理的 C 原始程序
这里就生成了汇编代码
这些就是我们看不懂的机器指令了。也就是01代码。
静态库是指编译链接时 , 把库文件的代码全部加入到可执行文件中 , 因此生成的文件比较大 , 但在运行时也就不再需要库文件了。其后缀名一般为“.a”动态库与之相反 , 在编译链接时并没有把库文件的代码加入到可执行文件中 , 而是在程序执行时由运行时链接文件加载库 , 这样可以节省系统的开销。动态库一般后缀名为 “.so”, 如前面所述的 libc.so.6 就是动态库。gcc 在编译时默认使用动态库。完成了链接之后 ,gcc 就可以生成可执行文件 , 如下所示。 gcc hello.o –o hellogcc 默认生成的二进制程序,是动态链接的,这点可以通过 file 命令验证正常来说我写的程序都是通过动态链接的,通过file指令我们就可以看到。
通过ldd指令,我们就可以看到他的标准库,这里去掉lib以及后面的.so后面的内容,我们就可以看到,他就是C标准库。
我们也可以手动改成静态链接:通过加static来实现
下面说说动态链接和静态链接的区别:
动态链接的可执行程序很小,在下载以及加载到内存的时候很方便,但是如果是静态链接的话,需要的内存很大,下载的时候也很慢。
所以C标准库中的代码是只有一份的,也称共享库。
这里简单提下windows下的动态和静态:
动态的后缀是.dll 静态的是.lib
会不会写 makefifile ,从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中, makefifile 定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作 ,makefifile带来的好处就是 ——“ 自动化编译 ” ,一旦写好,只需要一个 make 命令,整个工程完全自动编 译,极大的提高了软件开发的效率。make 是一个命令工具,是一个解释 makefifile 中指令的命令工具,一般来说,大多数的 IDE 都有这个命 令,比如:Delphi 的 make , Visual C++ 的 nmake , Linux 下 GNU 的 make 。可见, makefifile 都成为了一种在工程方面的编译方法。make 是一条命令, makefifile 是一个文件,两个搭配使用,完成项目自动化构建。
首先我们先看看怎么使用:
这就是依赖关系
上面依赖关系下面对应的就是依赖方法,这里是用gcc来进行编译生成可执行文件
我们可以看到他们的关系是反过来的。这就是符合了数据结构栈的后进先出的原则。
通过测试我们就知道make clean总是可以执行的,但是为什么make不能总是执行呢?
xshell是怎么知道文件没有改动过的呢?
这里就提到了3个时间的问题:
通过指令stat 加文件名即可找出时间
通过上面的试验,我们可以知道,make看是否重复编译是看修改的时间,如果修改的时间和查看的时间是一样的,那么就要重新编译,否则就不需要重新编译。
看这段代码的结果,这里的printf竟然在程序结束之后才显示出来,这是为什么呢?
这就提到了缓冲区的概念,如果我们没有进行回车换行,那么内容就还在缓冲区中,没有被刷新处理。我们要想立刻看到结果,我们可以通过fflush来刷新缓冲区即可。
所谓的进度条就是加载的时候我们看到的,我们可以通过一行输出来实现,具体参考代码:
先看看效果:
这是代码,这里我创建了3个文件,分别是proncess.c , proncess.h ,main.c3个文件
因为这个工程很小,也不需要声明和定义分离。
我们可以在输入l 0 之后按enter键就可以不断的查看代码,直到最后。
如果有断点的情况下就会跑到断点处停下来
yum install git
首先我们要在gitte上创建一个仓库,然后把链接复制下来,然后在xshell中通过git clone的指令把远端仓库和本地对应起来,然后我们就可以把我们要传送的文件放在这个目录下。
这里是准备工作,这里有已经写好的文件,后面我们就可以执行三板斧操作了: