Windows下的命令编译与Makefile

一般来说在程序编译的中,无论是C、C++,首先要把源文件编译成中间代码文件,在Windows下是 .obj 文件(UNIX下是 .o 文件),即 Object File,这个动作叫做编译(compile)。然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。 


NMAKE(Microsoft Program Maintenance Utility)的命令行语法
makefile的组成部分包括:描述语句(description block),inference rules(推导规则),宏和指令(directive)。描述语句就是dependent lines和command lines的组合;inference rules就是预先定义好的或用户自己定义的依赖关系和关联命令;宏就不用说了吧;指令就是内定的一些可以被NMAKE识别的控制命令,提供了很多有用的功能。

makefile中的命令要以[Tab]开头,如下是一个简单的例子,其中main.cpp中用到add.cpp中的函数。

main.exe:main.obj add.obj
	link main.obj add.obj
main.obj:main.cpp add.h
add.obj:add.cpp
注意:命令link前一定要有[Tab]空格。


 VC带的编译器名字叫cl.exe,它有这么几个与标准程序库有关的选项:   /ML、/MLd、/MT、/MTd、/MD、/MDd。这些选项告诉编译器应用程序想使用什么版本的C标准程序库。/ML(缺省选项)对应单线程静态版的标准程序库(libc.lib);/MT对应多线程静态版标准库(libcmt.lib),此时编译器会自动定义_MT宏;/MD对应多线程DLL版(导入库msvcrt.lib,DLL是msvcrt.dll),编译器自动定义_MT和_DLL两个宏。后面加d的选项都会让编译器自动多定义一个_DEBUG宏,表示要使用对应标准库的调试版,因此/MLd对应调试版单线程静态标准库(libcd.lib),/MTd对应调试版多线程静态标准库(libcmtd.lib),/MDd对应调试版多线程DLL标准库(导入库msvcrtd.lib,DLL是msvcrtd.dll)。 

关于cl命令的几个常用参数:

/D<name> 定义宏

/Od  使编译器不做,一般利于调试

/Zi  包含调试信息

/Zp?  其中问号表示数字,表示默认的对齐方式,如Zp1表示按1个字节对齐  Zp8按8字节对齐, 其中对齐方式可以在程序中如下使用

//定义对齐方式
#pragma pack(push, 8)
/*类或结构体等的定义*/
#pragma pop(pop)



.bat批处理命令语法可参考 http://hi.baidu.com/epeak/blog/item/29774c8116cd03d1bd3e1efd.html


参考《跟我一起写Makefile》

你可能感兴趣的:(多线程,windows,Microsoft,dll,makefile,编译器)