今天在VC的bin目录下发现了一个别nmake,查了查资料发现它用处还不小.,我们的编译还要依靠它,平时我们在用VC的时候点一下编译图标便什么都有了,具体怎么实现编译的呢?
其实分两步:
第一步,把每一.c or .cpp文件编译成.obj文件。
第二步,用link把每一个.obj文件和库文件连接起来生成.exe。
而nmake的作用是把两步合并起来,编译和连接同时进行。这要用到一个类似于dos下的批文件的.make文件,这个文件里描述了nmake要执行的每一步。
另外,nmake还支持incremental生成功能,即未修改的文件不重新编译。
Microsoft 程序维护实用工具 (NMAKE.EXE) 是一个 32 位,基于说明文件中包含的命令生成项目的工具。NMake具有丰富的选项,可以完成复杂编译操作。它可以辨别源代码的改动,并选择性的编译,为你节省大量不必要的编译时间。
以后有时间一定要把它好好的玩玩,看来C++里好玩的东西还多着呢,难怪那些大虾们都这么推崇C++的
from http://hi.baidu.com/iaskall/item/e91b479980c15888581461c1
有关UNIX下的makefile教程,可参见http://www.cnblogs.com/liyanwei/archive/2010/04/29/1723931.html
今天由于在windows下想写一个c++的类,但是又不想打开vs或者vc,于是直接用记事本编的。但是我写好之后(一个class,一个h,一个main文件)三个文件该怎么编译呢?我尝试着先编译类,然后再编译main,但是总是不成功。想到unix那个下的makefile,我想到了nmake,并且按照下面的方法最终编译成功。首先这三个文件分别是:
A.h
class A
{
public:
void Func(void);
};
A.cpp
#include "A.h"
#include<iostream>
void A::Func(void){std::cout<<"haha";}
然后是tem.cpp
#include<iostream>
#include "A.h"
using namespace std;
void Test(void)
{
A *p;
A a;
p = &a; // 注意 a 的生命
p->Func(); // p是“野指针”
}
int main(){
Test();
return 0;
}
最后是makefile文件。这个和unix下的makefile有点区别,但是大体上是相同的。一般都用到伪目标。
all : tem.exe
tem.exe : tem.obj A.obj
link tem.obj A.obj
tem.obj : A.h
cl -c tem.cpp
A.obj : A.h
cl -c A.cpp
这个文件为hello.mk.
最后cd至这个文件夹下,然后nmake /f hello.mk,自动编译成功,生成最终的目标文件tem.exe,便可以执行了。