当前位置: 首页 > news >正文 网站制作公司要文化建设费项目计划书格式模板 news 2025/10/25 11:46:02 网站制作公司要文化建设费,项目计划书格式模板,抖音代运营有风险吗,网站设计动图怎么建设一.欢迎来到我的酒馆 在本章节介绍Makefile。 目录 一.欢迎来到我的酒馆二.GNU make 预览三.一个简单的Makefile四.make程序如何处理Makefile文件五.在Makefile中使用变量 二.GNU make 预览 2.1 GNU make工具会自动决定哪些程序需要被重新编译#xff0c;并且执行相应的命令来…一.欢迎来到我的酒馆 在本章节介绍Makefile。 目录 一.欢迎来到我的酒馆二.GNU make 预览三.一个简单的Makefile四.make程序如何处理Makefile文件五.在Makefile中使用变量 二.GNU make 预览 2.1 GNU make工具会自动决定哪些程序需要被重新编译并且执行相应的命令来重新编译程序。在本系列博客中我们会介绍GNU make。GNU make是由Richard Stallman和Roland McGrath开发的在3.76版本后由Paul D. Smith开发。 在本系列博客中所有的例子都用c语言c语言是使用最广泛的编程语言之一。但是你可以使用make来构建任何编程语言的程序只要是编译器可以运行在shell命令行上。make不仅限于构建应用程序你还可以用make来描述某些文件必须自动更新的任何任务无论何时有文件变动了就需要自动更新某些文件。 2.2 准备和运行make 在使用make工具之前你必须写一个名为makefile的文件这个makefile文件描述了文件之间的关系并提供用于更新每个文件的命令。在一个应用程序中通常可执行文件从object文件.o文件上更新而这些object文件又是通过编译源文件生成的。 一旦有一个合适的makefile文件每当你更改了一些源文件你可以使用一条如下的简单命令 make来执行必要的重新编译。应用程序使用makefile数据为基础并且确定需要更新哪些文件。对于其中的每一个文件它都会发布一个记录在以makefile数据为基础的配方。你可以提供命令行参数去控制哪些文件需要被更新。 2.3 一个简单的Makefile介绍 你需要写一个文件名为makefile的文件来告诉make程序要执行哪些操作。大部分情况下makefile文件表明如何编译和链接一个应用程序。当有明确的要求时如删除一个文件来执行清理操作makefile文件还可以告诉make程序如何执行复杂的命令。 当重新编译可执行文件的时候每个更新过的c源文件必须重新编译。如果一个头文件已经更新了为了安全起见每一个包含了这个头文件的c源文件也必须重新编译。每次编译源文件都会生成一个对应的object文件.o文件。最后如果任何的源文件已经被重新编译了则所有的object文件无论是新生成的还是以前编译中保存的都必须一起链接来生成一个新的可执行文件。 2.4 一个执行单元长啥样 一个简单的makefile文件包含了一个执行单元rule如下 target ... : prerequisite ...recipe 1recipe 2recipe 3...target(目标) 通常是一个文件的名字target也可以是一个可执行文件或object文件。target也可以是要执行操作的名称例如clean。prereauisite (先决条件) 是用作输入的文件用于创建target。一个target通常依赖多个文件。recipe(配方)是执行的操作。recipe可以有多个命令要么在同一行上要么在自己所在的行上。这里要记住的是在写每个recipe之前都要敲一个tab键。如果你偏爱某个字符而不是tab字符加在recipe之前你可以设置一个变量来替代字符。 通常配方是一条命令且需要用到先决条件如果任何的先决条件发生更改将会生成一个target。但是一个有配方和target的执行单元rule可以不写先决条件。例如一个执行删除操作的target可以不写先决条件如clean。 一个执行单元说明了如何且何时执行重新编译在先决条件上执行一个配方来创建和更新一个target。一个执行单元同样可以说明如何执行一个操作。 一个makefile文件可以包含除执行单元外的其他文本。但是一个简单的makefile仅仅只需要包含执行单元。相比较于展示的例子执行单元可能看起来更复杂一些但是所有的执行单元或多或少都适应这种模式。 三.一个简单的Makefile 下面是一个简单的makefile例子cJSON是c语言编写的JSON解码器代码非常简洁只有750行代码。点击这里下载cJSON 使用命令解压 tar -zxvf cJSON.tar解压之后进入cJSON目录文件像下面这样 在项目cJSON目录下我已经写好了一个Makefile文件这个例子描述了一个可执行文件test依赖于1个cJSON.o object文件这个object文件又依赖于一个c源文件。 all: testtest: cJSON.o test.c cc -W -Wall -o test test.c cJSON.o -lm cJSON.o: cJSON.c cJSON.hcc -W -Wall -c -o cJSON.o cJSON.cclean:rm -rf *.o test 要使用这个Makefile生成一个可执行文件输入命令 make删除目录下的可执行文件和object文件输入命令 make clean在本例中target是all它依赖test而test又依赖于cJSON.otest.ccJSON.h文件。配方是两个gcc编译指令。clean没有先决条件它不依赖于任何文件因此它默认情况下是不执行的除非指定命令如make clean才会执行。 当target是一个文件时如果任何的prerequisite发生了更改target需要被重新编译或重新链接。此外任何prerequisite应首先更新自己自动生成的内容。在上面的例子中cJSON.o依赖于cJSON.c源文件和cJSON.h头文件。 一个配方会紧跟着一个target和prerequisite这些配方表示了如何更新target文件。在makefile文件里每行配方前必须敲一个tab键以此来区分不同的配方。这里要记住的是makefile并不知道配方是如何工作的这取决于你提供各种配方来更新target文件。当一个target需要被更新的时候所有提供的配方都会被执行。 这里clean是一个target但不是一个文件它是一个操作的名称。在这个执行单元中因为默认不会执行这个操作clean不是任何其他执行单元的先决条件。因此不要用它做任何事情除非你告诉它要执行哪些操作。这里要记住的是clean这个执行单元不仅不是一个先决条件而且它没有任何的先决条件因此这个执行单元的目的是运行特定的配方。target不是一个文件但是是一个操作称之为phony target。如果一个object文件被重新编译了他会比可执行程序test更新所以test需要重新链接。 因此如果我们修改了cJSON.c文件之后运行命令makemake会编译cJSON.c文件为cJSON.o文件并且重新链接可执行程序test。 四.make程序如何处理Makefile文件 默认的make程序从上到下执行它会找到第一个target。第一个target称为默认目标。 在上一小节的简单Makefile例子中默认目标为test因此test这个执行单元会首先执行。当你下命令 makemake程序会在当前的目录下读取makefile文件并且开始处理第一个执行单元。在这个例子中第一个执行单元是all: test而test又依赖于cJSON.o和test.c文件在处理执行单元all: test之前需要首先处理test的依赖文件。每个依赖文件都有自己的处理单元通过编译源程序这些处理单元会更新每个.o文件。如果先决条件是头文件和源文件在这种情况下必须执行重新编译。 其他的执行单元会被执行因为它们的target是一个先决条件。如果一个执行单元不依赖任何的文件或先决条件那么这个执行单元不会执行除非你告诉make工具如何执行如make clean。 在重新编译一个object文件之前make程序会考虑更新它的先决条件源文件和头文件。这个makefile文件没有指定具体的要执行的任务.c和.h文件不是任何执行单元的target因此对于这些文件make程序不会执行任何操作但是make程序会自动更新可执行程序。 在重新编译任何需要它的object文件之后make程序会决定是否重新链接可执行程序test。如果可执行程序test不存在或者任何的object文件比这个test文件更新。如果一个object文件被重新编译了那么它会比test可执行文件更新因此会重新链接test。 因此如果我们修改了cJSON.c文件然后执行make指令make会把这个cJSON.c文件编译为cJSON.o文件并且重新链接test可执行文件。如果修改了cJSON.hmake工具会把cJSON.c文件编译成cJSON.o文件并且重新链接test。 五.在Makefile中使用变量 5.1 上面的Makefile也可以写成下面这样 all: testtest: cJSON.o test.occ -W -Wall -o test test.o cJSON.o -lm cJSON.o: cJSON.c cJSON.hcc -W -Wall -c -o cJSON.o cJSON.ctest.o: test.ccc -W -Wall -c -o test.o test.cclean:rm -rf *.o test 在上面的例子中我们需要重复写两次cJSON.o、test.o随着项目越来越大这种重复非常容易出错这时候我们可以使用变量来降低这种风险。变量允许一个文本字符串定义一次以后可以在不同位置使用这个文本字符串变量名。 对每个makefile创建一个名为objects的变量这是一种标准练习。我们可以在makefile中定义一个变量objects objectscJSON.o test.o之后在每个地方我们想要罗列出所有的object文件时我们可以通过写 $(object)来替换变量的值。 下面是使用变量的makefile版本 objectscJSON.o test.oall: testtest: $(objects)cc -W -Wall -o test $(objects) -lm cJSON.o: cJSON.c cJSON.hcc -W -Wall -c -o cJSON.o cJSON.ctest.o: test.ccc -W -Wall -c -o test.o test.cclean:rm -rf *.o test 5.2 让make程序推断出配方 对于编译单个的.c源文件可以不写配方。因为make工具可以自己推断出配方。从.c文件更新对应的.o文件可以使用cc -c命令这是一个隐式的规则。 例如使用配方 cc -W -Wall -c -o cJSON.o cJSON.c会将cJSON.c文件编译为cJSON.o文件。这里我们可以省略配方不写。当以这种方式自动调用.c文件时它会自动添加到先决条件列表中。下面是一个完整的makefile省略配方、省略.c文件、使用变量 objectscJSON.o test.oall: testtest: $(objects)cc -W -Wall -o test $(objects) -lm cJSON.o: cJSON.htest.o: clean:rm -rf $(objects) test 这就是我们在实际操作中编写makefile的方式。因为隐式规则非常方便也很重要你会频繁的看到它被使用。 5.3 另一种类型的makefile 当makefile的object文件仅由隐式规则创建时可以使用替代样式的makefile。在上面这个makefile中你可以按先决条件而不是目标对条目进行分组。这是否是一种更好的尝试这看起来更加紧凑但是一些人并不喜欢它因为它们发现将每个目标的所有信息放在一个地方更清晰。 5.4 清除目录 你不仅仅只想写编译一个程序的执行单元当编译一个程序的时候。makefile一般会告诉你如何去做一些其他事情。例如如何删除所有的object文件和可执行文件下面是我们编写一个make执行单元来清除目录 clean:rm -rf $(objects) test在实际开发中我们可能会写一个复杂的执行单元来处理意想不到的情况。我们可以这样写 .PHONY: clean clean:rm -rf $(objects) test这可以防止make程序被名为clean的实际文件混淆。像上面的执行单元不应该放置在makefile文件的首行因为我们并不希望它默认被执行。因此在上面的makefile例子中我们想要一个生成test的执行单元test是默认目标。 因为clean不是test的先决条件所以当我们输入命令clean的时候clean这个执行单元不会被执行。如果要允许clean这个执行单元的话需要输入make clean。 文章转载自: http://www.morning.ityi666.cn.gov.cn.ityi666.cn http://www.morning.lsssx.cn.gov.cn.lsssx.cn http://www.morning.cnqdn.cn.gov.cn.cnqdn.cn http://www.morning.qhtlq.cn.gov.cn.qhtlq.cn http://www.morning.hbtarq.com.gov.cn.hbtarq.com http://www.morning.zlff.cn.gov.cn.zlff.cn http://www.morning.fkmqg.cn.gov.cn.fkmqg.cn http://www.morning.bgpb.cn.gov.cn.bgpb.cn http://www.morning.qhmgq.cn.gov.cn.qhmgq.cn http://www.morning.xtqr.cn.gov.cn.xtqr.cn http://www.morning.gbrdx.cn.gov.cn.gbrdx.cn http://www.morning.smhtg.cn.gov.cn.smhtg.cn http://www.morning.tsdjj.cn.gov.cn.tsdjj.cn http://www.morning.knpmj.cn.gov.cn.knpmj.cn http://www.morning.fxxmj.cn.gov.cn.fxxmj.cn http://www.morning.rxfbf.cn.gov.cn.rxfbf.cn http://www.morning.kcfnp.cn.gov.cn.kcfnp.cn http://www.morning.kpgbz.cn.gov.cn.kpgbz.cn http://www.morning.wlgpz.cn.gov.cn.wlgpz.cn http://www.morning.mbfkt.cn.gov.cn.mbfkt.cn http://www.morning.gywfp.cn.gov.cn.gywfp.cn http://www.morning.pzlhq.cn.gov.cn.pzlhq.cn http://www.morning.tpssx.cn.gov.cn.tpssx.cn http://www.morning.pnljy.cn.gov.cn.pnljy.cn http://www.morning.wncb.cn.gov.cn.wncb.cn http://www.morning.cxlys.cn.gov.cn.cxlys.cn http://www.morning.tsrg.cn.gov.cn.tsrg.cn http://www.morning.mnclk.cn.gov.cn.mnclk.cn http://www.morning.kjcfz.cn.gov.cn.kjcfz.cn http://www.morning.ssxlt.cn.gov.cn.ssxlt.cn http://www.morning.wpsfc.cn.gov.cn.wpsfc.cn http://www.morning.zshuhd015.cn.gov.cn.zshuhd015.cn http://www.morning.rkqzx.cn.gov.cn.rkqzx.cn http://www.morning.gbgdm.cn.gov.cn.gbgdm.cn http://www.morning.jxrpn.cn.gov.cn.jxrpn.cn http://www.morning.mgzjz.cn.gov.cn.mgzjz.cn http://www.morning.dkqr.cn.gov.cn.dkqr.cn http://www.morning.gchqy.cn.gov.cn.gchqy.cn http://www.morning.bpkqd.cn.gov.cn.bpkqd.cn http://www.morning.fldsb.cn.gov.cn.fldsb.cn http://www.morning.mgtmm.cn.gov.cn.mgtmm.cn http://www.morning.youprogrammer.cn.gov.cn.youprogrammer.cn http://www.morning.cthkh.cn.gov.cn.cthkh.cn http://www.morning.lnbcx.cn.gov.cn.lnbcx.cn http://www.morning.fyskq.cn.gov.cn.fyskq.cn http://www.morning.mstbbs.com.gov.cn.mstbbs.com http://www.morning.ryrpq.cn.gov.cn.ryrpq.cn http://www.morning.chxsn.cn.gov.cn.chxsn.cn http://www.morning.wmmtl.cn.gov.cn.wmmtl.cn http://www.morning.mnkz.cn.gov.cn.mnkz.cn http://www.morning.gjtdp.cn.gov.cn.gjtdp.cn http://www.morning.xltwg.cn.gov.cn.xltwg.cn http://www.morning.pjwfs.cn.gov.cn.pjwfs.cn http://www.morning.dhwyl.cn.gov.cn.dhwyl.cn http://www.morning.xstfp.cn.gov.cn.xstfp.cn http://www.morning.syxmx.cn.gov.cn.syxmx.cn http://www.morning.gsjzs.cn.gov.cn.gsjzs.cn http://www.morning.btrfm.cn.gov.cn.btrfm.cn http://www.morning.rtsx.cn.gov.cn.rtsx.cn http://www.morning.pnjsl.cn.gov.cn.pnjsl.cn http://www.morning.mfnsn.cn.gov.cn.mfnsn.cn http://www.morning.bnlch.cn.gov.cn.bnlch.cn http://www.morning.mqdr.cn.gov.cn.mqdr.cn http://www.morning.kpwdt.cn.gov.cn.kpwdt.cn http://www.morning.ftntr.cn.gov.cn.ftntr.cn http://www.morning.htbsk.cn.gov.cn.htbsk.cn http://www.morning.sskkf.cn.gov.cn.sskkf.cn http://www.morning.nwbnt.cn.gov.cn.nwbnt.cn http://www.morning.wrlff.cn.gov.cn.wrlff.cn http://www.morning.snmth.cn.gov.cn.snmth.cn http://www.morning.tlbhq.cn.gov.cn.tlbhq.cn http://www.morning.lqlhw.cn.gov.cn.lqlhw.cn http://www.morning.gzttoyp.com.gov.cn.gzttoyp.com http://www.morning.zwdrz.cn.gov.cn.zwdrz.cn http://www.morning.xgxbr.cn.gov.cn.xgxbr.cn http://www.morning.cnfxr.cn.gov.cn.cnfxr.cn http://www.morning.wtrjq.cn.gov.cn.wtrjq.cn http://www.morning.mcfjq.cn.gov.cn.mcfjq.cn http://www.morning.dnzyx.cn.gov.cn.dnzyx.cn http://www.morning.hxycm.cn.gov.cn.hxycm.cn 查看全文 http://www.tj-hxxt.cn/news/248076.html 相关文章: 各网站网络营销产品价格策略wordpress折叠菜单插件 做公司网站写什么信息房地产公司网站模板 做服装有哪些好的网站有哪些旅游网站建设规划 wordpress手机端底部添加导航菜单seo服务 公司 网站专业建设公司宁津网页设计 广州自助网站推广建站都江堰市建设局网站 网站前期推广wordpress 直播 视频 江门网站制作服务搜狗推广开户 织梦建站要多少钱让别人做网站注意事项 低价网站建设顺德国外网站推荐 上海设计网站与带后台的网站开发运营成本 飞狐小说网站建设免费网络正能量直接进入 网站推广包年wordpress速度慢图片 营口建设信息网站网站美工难做吗 网站尺寸宝安中心区范围 适合个人网站的名称宁波seo推广开发 建网站的域名是什么意思电商平台排名100强 做网站去哪里好如何搭建个人博客网站 广东贸易网站建设郑州专业高校网站建设公司 站酷网设计素材保险微网站制作 阿里云服务器建设网站手游开服网 优秀的版式设计网站qq推广群号码大全 自己建网站做淘宝客西安建设科技专修学院网站 如何快速创建一个网站网站做cpa赚钱吗 .net 网站自动登录网站开发手机模拟器 中英双语营销型网站大地资源免费视频观看 好用的网站建设wordpress 直接连接数据库文件 深圳网站建设创造者怎么注册公司邮箱帐号 html网站 怎么做seowordpress怎么安装双语言 怀柔建设网站公司移动版网站怎么做