当前位置:首页 > Windows程序 > 正文

windows 下使用makefile(二)

2021-05-24 Windows程序

之所以需要另外设定" 执行时需要="" mspdb60.dll,而它被安装於="" c:\msdev\common\msdev98\bin="" 之中。<="" p><p>如果你写的程式不只是单纯的="" 程式,,还用到了="" mfc,一样可以在="" console="" mode="" 下编译,这时候你的环境变数应该如此设定:<="" mfc\include="" 和="" mfc\lib,就可以让编译器和联结器找到="" mfc="" 的="" libraries。如果你还需要用到="" atl,就得在="" 环境变数中再加上="" c:\msdev\vc98\atl\include。<="" files\microsoft="" studio下,所以改写批次档如下:<="" studio\vc98\bin;d:\program="" studio\common\msdev98\bin="" studio\vc98\include;d:\program="" studio\vc98\mfc\include="" studio\vc98\lib;d:\program="" studio\vc98\mfc\lib<="" p><p>然后运行cmd,将以上设置复制粘贴到鼠标闪烁处。如果想要确认路径更改正确,可以键入set命令查看。<="" p><p>注:这样的环境变量修改,仅对本次命令行窗口有效,因为它是一个虚拟设备。如果想要每次进入时,不做这个工作。可以运行vcvars32.bat然后设置你的环境变量。为了不影响vc++的原本设置方便集成环境的使用,我并没有实际操作,一个简单的复制粘贴也不见得麻烦。另外还可以在我的电脑-属性-高级-环境变量里直接修改,这个修改也是永久性的。到这里,路径就设置好了。下面试操作一下:<="" p><p>我在f:\盘保存了一个test.cpp文件作为测试文件。文件内容如下:<="" #include="" <iostream.h>="" void="" main()="" {=""  cout<<"hello"<<endl;="" }="========================================

使用cd命令把当前命令行窗口路径切换到F:\>,然后执行cl" test.cpp命令,在f:\盘路径下生成了两个文件,test.obj和test.exe。然后再运行test.exe,就可以看到结果了(输出hello)。<="" p><p>下面再举一个例子,也就是下面要学习的makefile文件。测试文件名为mypath.mak(你可以任意取名),依旧存储在当前路径下。<="" all:  =""  ="" @echo  ="" $(path)="=========================

运行命令nmake" mypath.mak,你可以看到输出结果为你刚才设置过的路径(我的结果是d:\program="" studio\common\msdev98\bin)。<="" p><p>2.产生自己的makefile文件<="" p><p>下面是我在网上找到的一个简单的例子及其解说(<a="" target="_blank" href="http://www.readygo.com.cn/it-1104697.html" >http:="" ="" it-1104697.html<="" a>)<="" 下面来看一个简单的例子(以下内容均以win32平台为例):  ="" 文件名:makefile  ="" 1.  ="" #  ="" makefile  ="" 2.  ="" this  ="" is  ="" a  ="" example  ="" of  ="" make  ="" file  ="" 3.  ="" all:a1  ="" a2  ="" 4.      ="" all!  ="" 5.  ="" a1:  ="" 6.      ="" a1!  ="" 7.  ="" a2:  ="" 8.      ="" a2!  =""    ="" 运行make后,结果如下:  =""  现在让我们来分析一下这个简单的规则文件。=""   =""       ="" 第1、2行不用说,一眼就可以看出是注释。在make规则文件中,注释是以“#”开始,是行注释,和c++中的“="" ”功能一样。不过你可不能把它放到其它的语句之后,否则就错了。第3行就是规则开始了!all:a1  ="" a2一行中,规则的名字就是all,它通常是目标名(target)。一条规则可以有不止一个名字,像这一行,你也可以把它写成all  ="" all2:a1  ="" a2。这时,规则就有了两个名称—all和all2。当然,还可以有更多,都看你自己。后面的5、7两行也分别是两条规则的起始。在“:”之后的,就是依赖项。在这一行里,依赖项有两个,分别是a1和a2。这些依赖项可以是其它的规则名(目标名),也可以是文件名。依赖和目标之间的关系就是“依赖关系”。一条规则中,可以有零个(像后面的两条规则)、一个或多个依赖。第4行@echo  ="" all!是命令行。它是执行all规则时要执行的命令。要注意的是,一条规则内的命令要以tab为一行的起始,以表示命令是属于一个规则。一条规则也可以有多条命令,每条命令占一行(要以tab开头)。至于可以使用哪些命令,这完全取决于你使用的os和shell。=""        ="" 当执行make时,它会找到第一条规则。然后,make就会检查依赖和目标之间的关系。如果目标比依赖旧,就执行规则,以更新目标。执行完规则就结束。如何判定目标和依赖的新旧呢?如果目标(文件)不存在,目标的时间就为0;如果目标(文件存在),目标的时间就为文件的修改时间。如果依赖项是一条规则,就执行依赖的规则(这里是一个递归),然后依赖的时间就是当前最新时间;如果是一个存在的文件,就为文件的修改时间,否则就报错。之后,就可以比较目标和依赖之间的关系。不过,有一点特殊的是,在没有依赖项时,依赖的时间为1。="" 在这个例子中,make先找到规则“all”,发现目标不存在,所以目标的时间为0;然后在查找依赖“a1”,结果“a1”不存在;于是,执行规则“a1”。“a1”不存在,所以它的时间为0,而“a1”没有依赖,它的依赖时间为1;1>0,所以,执行规则“a1”。然后返回规则“all”,再检查依赖“a2”。“a2”执行过程同“a1”。这时,“all”的目标时间为0,依赖时间为最新时间。于是,执行规则“all”的命令。="" 当然,大家也可以指定一条规则让make执行,比如:make  ="" a1这个命令就是告诉make程序不去找第一条规则,而是规则“a1”来执行。并且我们还可以一次执行多条规则,比如:执行make  ="" a1  ="" a2就会连续执行“a1”、“a2”两条规则。  ="" p><p>     ="" ok,虽然讲得很混乱,但也费了我半天的力气。大家应该有一点了解make规则的执行过程了吧。  ="=============================================

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/70479.html