教你在VS2005下写MakeFile
来源:互联网 发布:即时通讯软件开发方案 编辑:程序博客网 时间:2024/05/22 02:27
原文:http://hi.baidu.com/shihuap/blog/item/df57a863126e22650c33facb.html
也许有一部分人想在vc下使用MakeFile来编绎项目,有些是为了跨平台、有些是因为开源,根本就没有dsp,dsw,slution之类的文件、有些是为了提高自己的水平、也有人像我一样,因为机器配置的问题,不愿意多次打开VS2005——这个东西吃内存和CPU不是一般的厉害。而网上又很难找到合适的中文资料,MSDN上讲的东西又太粗放了,寥寥几句,令人茫然。闲话少说,下面正式开始。据我所知,VS2005不再像VC6一样,可以导出MakeFile,所以如果你需要MakeFile就要自己写。但是它仍然支持MakeFile,这一点是不用担心的。首先有五个问题要说明一下。
第一是vc的环境变量设置,有些人不明白VC的环境变量,往往得到这个错误提示“'nmake' 不是内部或外部命令,也不是可运行的程序或批处理文件。”。在调用nmake之前,要先调用vc的路径下的VCVARS32.BAT,这个文件位于vc的安装目录下,为"...\Program Files\Microsoft Visual Studio 8\VC\bin\。
第二是nmake的调用,msdn中有详细的讲解。
NMAKE [option...] [macros...] [targets...] [@commandfile...],举个例子,有一个test.mak文件,如果你需要用它来生成exe,那么你可以:
nmake /f demo.mak。
如果你要指定生成目标:
nmake ALL /f demo.mak
如果你要指定宏定义:
nmake ALL CFG=DEBUG /f demo.mak
其中CFG=DEBUG定义了一个宏,值为DEBUG,这个我们后面再详细说明。
第三是cl.exe的调用,这个命令有非常多的选项,但是常用的就几个。这个命令用于编译c/c++文件,生成.obj目标文件。
第四是link.exe的调用,这个命令是用来链接生成exe和debug数据库的。
第五是rc.exe的调用,这个命令很简单,用来从.rc生成二进制的.res资源。在link的时候要用到.res——如果你的程序用资源的话。
当然还有其他的事项,这里不能一一加以说明,最详细的还是要查MSDN。
下面正式开始MakeFile的说明。
1、描述块:
MakeFile的核心是“规则”,MSDN中称之为“描述块”(Description blocks),描述块是一个说明了依赖性的行,可以带有命令行,Fig1.0中的hello: hello.exe about.res就是一个描述块,但是它没有带命令行。
about.res: about.rc
rc /l 0x804 /fo ".\release\about.res" "about.rc"
也是一个描述块,它后面跟有命令行——请注意,命令行不是描述块的一部分。MakeFile由一个个描述块组成。描述块的语法如下:
targets... : dependents...
commands...
描述块中间必须有“:”,否则nmake.exe将报这一行有语法错误。targets是要生成的目标、dependents是生成源,一般为c/c++文件。commands说明了如何生成targets.一个targets可以依赖多个dependet项。
Fig1.0
好,我们知道描述块是做什么的了,那么MakeFile又是怎么生成目标文件的呢?MakeFile中的第一个目标称为默认目标,如果nmake时没有指定目标,则生成默认目标。在Fig1.1中,ALL是默认目标,如果你执行nmake /f fig1.2.mak,会生成tic.exe。如果执行 nmake CLEAN /f fig1.2.mak,会删除.\debug\*.obj。目标指明了要做什么,而依赖项,也就是冒号后面的那些内容指明了生成源,后面的commands指明了如何去生成。在生成.obj前,nmake会检查它依赖的.c&.cpp&.h是否更新,如果更新就重新执行commands生成新的.obj,否则nmake什么也不做。按照这个顺序从上到下依次检查,从最底下的.c&.cpp开始生成.obj,然后链接成我们需要的.exe。
MakeFile中的宏可以在nmake的参数中赋值,也可以在MakeFile中赋值,用户可以自定义宏,另外还有一些特殊宏,我基本上不用这些特殊宏,因为它们比较难懂,不适合项目中的交流。一个宏名可以是数字、字母和下划线的组合,建议使用大写字母增加可读性。FIig1.1中使用了大量的宏。宏赋值直接用"="即可,比如定义一个宏CFG,赋值就可以CFG=DEBUG,$(CFG)表示使用这个宏。
Fig1.1
也许有人不理解为什么使用宏,使用宏的最大好处是可以减少重复输入,同时提高MakeFile的可读性和可维护性。
0
上一篇:Hello World C program using Android Toolchain
下一篇:在VC里如何用Makefile文件编译?
相关热门文章
- 欢迎胖哥教你减肥在ChinaUnix...
- 编译hadoop的libhdfs.a
- 欢迎教你炸金花出老千道具在Ch...
- Linux上编译hadoop-2.7.1的lib...
- 欢迎教你学扑克牌在ChinaUnix...
- test123
- 编写安全代码——小心有符号数...
- 使用openssl api进行加密解密...
- 一段自己打印自己的c程序...
- sql relay的c++接口
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
- 教你在VS2005下写MakeFile
- 教你在VS2005下写MakeFile
- 手把手教你在VS2005下搭载LUA运行环境
- 如何在linux下写makefile
- 在windows下写makefile编译代码
- 如何在linux下写makefile
- 当你写Makefile的时候你在想什么
- 手把手教你如何写Makefile
- 手把手教你写makefile文件
- 手把手教你写openwrt的makefile
- [转载]手把手教你如何写 Makefile 文件
- 教你写Makefile(很全,含有工作经验的)
- 教你写Makefile(很全,含有工作经验的)
- 在VS2005下编译emule
- 在VS2005下编译libjpeg
- 在VS2005下配置OpenCV
- 跟我一起写 Makefile(下)
- 自己写的Makefile, 记录下~
- cocos2dx常见49种Action
- foxmail 联系人创建组群
- Android下使用dlopen函数动态调用.so链接库
- Hello World C program using Android Toolchain
- poi划斜线
- 教你在VS2005下写MakeFile
- 在VC里如何用Makefile文件编译?
- ADT20新建项目Android Support library not installed问题
- Android SDK更新失败的解决方法
- 随堂笔记
- VC++ Watch窗口查看指针指向的数组
- Android触碰事件
- 蓝牙发送多个文件
- Maven构建C++工程的插件-NAR
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
柯南同人之毛利沫晴
毛婷黑木耳
毛木耳价格
毛木耳批发价格
木耳 价格
毛木耳和黑木耳的区别
黑木耳种植
买黑木耳
黑木耳多少钱
吃黑木耳
黑木耳导航
特级黑木耳
黑木耳网站
黑木耳价钱
黑木耳生产厂家
黑木耳女人
黑木耳养殖
黑木耳黑木耳
黑木耳怎么
黑木耳种
黑木耳怎么吃
黑木耳多糖
东北黑木耳价格
老婆黑木耳
黑木耳炒鸡蛋
烤麸香菇黑木耳
欧美黑木耳
黑木耳12p
黑木耳价格走势
批发黑木耳
糖醋黑木耳
黑木耳生产
黑木耳女
黑木耳17p
黑木耳20p
黑木耳怎么变粉
陈思慧黑木耳
黑木耳p
黑木耳14p
女黑木耳
黑木耳炒蛋