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

辅助购卡网站怎么做wordpress爱好者

辅助购卡网站怎么做,wordpress爱好者,怎么免费咨询律师,米拓模板网站建设背景 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需…

背景

会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力

一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作

makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一 种在工程方面的编译方法。

make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

实例代码

这是一份处理myproc.c的makefile文件

myproc:myproc.cgcc -o myproc myproc.c

依赖关系:上面的myproc:myproc.c表示了依赖关系,它表明了myproc依赖myproc.c

依赖方法:gcc -o myproc myproc.c就是处理依赖关系的依赖方法

只要输入make,就会自动将目录中的myproc.c编译成myproc

如果myproc和clean的位置反过来的话,输入make,就会执行rm命令

下面我们来看一个较高难度的makefile的依赖关系

hello:hello.o gcc hello.o -o hello 
hello.o:hello.s gcc -c hello.s -o hello.o 
hello.s:hello.i gcc -S hello.i -o hello.s 
hello.i:hello.c gcc -E hello.c -o hello.i

依赖关系:

上面的文件 hello ,它依赖 hell.o

hello.o , 它依赖 hello.s

hello.s , 它依赖 hello.i

hello.i , 它依赖 hello.c  

原理

make是如何工作的,在默认的方式下,也就是我们只输入make命令。那么,

1.make会在当前目录下找名字叫“Makefile”或“makefile”的文件。

2. 如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“hello”这个文件, 并把这个文件作为最终的目标文件。

3. 如果hello文件不存在,或是hello所依赖的后面的hello.o文件的文件修改时间要比hello这个文件新(可以用 touch 测试),那么,他就会执行后面所定义的命令来生成hello这个文件。

4. 如果hello所依赖的hello.o文件不存在,那么make会在当前文件中找目标为hello.o文件的依赖性,如果找到则再根据那一个规则生成hello.o文件。(这有点像一个堆栈的过程),make在扫描makefile的时候是通过类似栈的结构来识别内容的,如果不满足条件的时候先入栈,直到碰到可以运行的内容后执行出栈

5. 当然,你们的C文件和H文件是存在的啦,于是make会生成 hello.o 文件,然后再用 hello.o 文件声明make的终极任务,也就是执行文件hello了。

6. 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。

7. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错, 而对于所定义的命令的错误,或是编译不成功,make根本不理。

8. make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起, 我就不工作啦。

这里大家可能会有一些疑问:

make是怎么识别文件的新旧的

stat 文件名,可以显示出文件的修改时间,有三个修改时间分别是Access,Modify,Change

文件是由内容+属性构成的

如果内容被修改:Modifty的时间就会改变

如果属性被修改:Change的时间就会被修改

如果只是打开文件,不做其他事情,Access时间会被修改(特殊)

但是修改了内容后,属性的时间也会发生变化,这是因为修改内容后,文件的size会发生变化,size属于属性,而且时间本身就是文件的属性

文件的属性存储在磁盘上,如果只因为访问文件,而大量的进行i/o操作是不合理的。只有在访问了20/30次后在会修改访问时间,具体的次数和版本有关

项目清理

工程是需要被清理的

.PHONY:clean
clean:rm -f myproc

 这就是一段清理文件的make指令,只要输入make clean,当前目录下的myproc文件就会被删除

.PHONY的作用:它能确保命令总是被执行,大家可能想了解什么情况会不被执行,如果我们在make的第一个内容加上.PHONY来修饰,与不加.PHONY修饰之间的差别是什么

上图没有加上.PHONY修饰,如果文件已经存在且源文件并未做修改,此时输入make便会产生报错

 上图是加上.PHONY修饰,如果文件是否已经存在或者源文件并未做修改,在这种情况下输入make照样会执行依赖方法

makefile进阶方法

BIN=proc.exe
CC=gcc
SRC=$(wildcard *.c)
OBJ=$(SRC:.c=.o)
LFLAGS=-o
FLAGS=-c
RM=rm -f$(BIN):$(OBJ)@$(CC) $(LFLAGS) $@ $^
%.o:%.c@$(CC) $(FLAGS) $<
.PHONY:clean
clean:@$(RM) $(OBJ) $(BIN)

 此时我们可以用一些变量来存储文件名

BIN=myproc:类似宏操作

$@:表示最终形成的目标文件

$^:表示依赖的众多文件列表

$(x):类似c++中的指针操作,将x解引用

SRC=$(wildcord *.c):能够显示当前目录中所有的.c文件

OBJ=$(SRC:.c=.o):将SRC中的.c文件替换成.o文件

@:不会回显内容

在处理多个源文件的情况:

  1. %.o和%.c:表示把当前路径下的而所有的.o / .c依次展开,有几分源文件就展开几份
  2. $<:是 Makefile 的自动变量,表示第一个依赖文件(prerequisite)

使用这些内容就可以大批量的编译文件了

Linux进度条

回车换行

回车和换行是两个不同的概念:回车是回到开始(\r)换行是(\n)\n支持printf刷新,\r不支持刷新

在c语言中为什么\n能够实现换行操作呢,这是在C语言中\r\n被简化成\n

支不支持刷新会影响什么呢,在使用gcc编译的时候

#include<stdio.h>
#include<unistd.h>
int main()
{printf("HELLO WORLD\r");sleep(1);return 0;
}

这时大家会发现,HELLO WORLD会延时出现,这是由于什么呢?

这是由于sleep(1)会让程序暂停1秒,但此时HELLO WORLD仍在缓冲区中未显示。printf函数默认使用行缓冲模式(当输出到终端时),即遇到换行符\n时才会自动刷新缓冲区并显示内容。而\r并不支持刷新缓冲区,这是我们可以使用fflush(stdout);手动刷新缓冲区

#include<stdio.h>
#include<unistd.h>
int main()
{printf("HELLO WORLD\r");    fflush(stdout);sleep(1);return 0;
}

进度条

#include"process.h"
#include<string.h>
#include<unistd.h>
#define NUM 101
void FlushProcess(double total,double current)
{char buffer[NUM];memset(buffer,0,sizeof(buffer));int len=strlen(lable);int num=(int)(current*100/total);for(int i=0;i<num;i++){buffer[i]='=';}double rate=current/total;printf("[%-100s][%.1f%%]\r",buffer,rate*100);fflush(stdout);
}
#include<stdio.h>
#include<unistd.h>
#include"process.h"double total=1024.0;
double speed =1.0;void DownLoad()
{double current=1.0;while(current<=total)//模拟从网路中获取数据{FlushProcess(total,current);//刷新数据usleep(3000);current+=speed;}printf("\ndownlocad %.2lfMB Done\n",current);
}int main()
{DownLoad();return 0;
}

此时我们在模拟进度条的实现

DownLoad函数用来模拟从网络中获取数据,FlushProcess函数用来实现进度条

1.rate用来实现进度条中的百分比信息      

2.buffer用来显示进度条中的填充内容

3.此时利用我们的回车符\r来实现进度条的填充,每次调用FlushProcess函数都会在原地刷新进度条的填充内容 

4.[%-100d]:表示会在[]之间预留100个字符的距离,-表示向左对齐

 


文章转载自:

http://1kX3dDpF.tbrnL.cn
http://YDxKRfKA.tbrnL.cn
http://Tw9HloWT.tbrnL.cn
http://uoBQPevV.tbrnL.cn
http://Gcp64fmu.tbrnL.cn
http://T9B8d8Ez.tbrnL.cn
http://SUv5Y30P.tbrnL.cn
http://sVAT2esI.tbrnL.cn
http://dNNpgsVa.tbrnL.cn
http://RifMBqoy.tbrnL.cn
http://E2ThCrmA.tbrnL.cn
http://uI9P28ow.tbrnL.cn
http://UTIh9htk.tbrnL.cn
http://4dy0kMvG.tbrnL.cn
http://JmvMXKEM.tbrnL.cn
http://G88r7l7I.tbrnL.cn
http://p8Q3wFrt.tbrnL.cn
http://P9hovHRi.tbrnL.cn
http://bEqy7XNB.tbrnL.cn
http://sVNjiSci.tbrnL.cn
http://7IuyrfB1.tbrnL.cn
http://YenfXEtI.tbrnL.cn
http://VgYAAZcM.tbrnL.cn
http://TVu6sXY2.tbrnL.cn
http://5cLSgX18.tbrnL.cn
http://ZV5xUnM7.tbrnL.cn
http://oIHdtbP5.tbrnL.cn
http://ZfJD04VR.tbrnL.cn
http://nnWHjt77.tbrnL.cn
http://248sutru.tbrnL.cn
http://www.dtcms.com/wzjs/660302.html

相关文章:

  • 网站如何转移到新的空间服务器上小区媒体网站建设
  • 注册域名后怎么建站更改wordpress管理员用户名密码
  • 网站后台更改首页代码浦东新区网站开发
  • 做网站有没有免费空间免费ppt模板简约
  • 一个网站不兼容ie怎么做做那个免费视频网站
  • 抄袭网站海珠建网站公司
  • 温州网站建设方案网站开发属于什么类型软件
  • 建设视频网站多少钱网站建设费能算作无形资产吗
  • 做个人网站的步骤南宁百度网站推广
  • 唐山市城市建设规划局网站个人建网站wordpress
  • 网站工信部超链接怎么做网站建设算研发费用吗
  • 四川省建设人才网站网站用图怎么做文件小质量高
  • 宁波网络营销推广制作快速排名优化系统
  • 淄博比较好的网站建设公司下载手机商城app
  • 厦门网站制作套餐还有哪些免费的网站可以做H5
  • 会员管理网站ASP建设网站诊断seo当前数据是指
  • 前端程序员招聘信息杭州优化建筑设计
  • 企业门户网站系统下载河北省做网站的企业
  • 国外服务器网站长沙网站创建
  • 如何在路由器上做网站转跳佛山自定义网站建设
  • 厦门建设工程交易中心网站wordpress 相关插件
  • 网站psd模版百度推广的价格表
  • 网站 备案信息免费域名网站php
  • 做网站维护难吗建设com网站
  • js效果网站有人用dw做网站吗
  • 电脑网站设计页面企信宝
  • 建站论坛网站后台怎么做友情链接
  • 酷站网素材同城网站开发
  • 青岛知名网站建设定制wordpress 图片 网盘
  • 闸北区网站设计与制作企业网站怎么建立