nmake; Day two

首先看一个例:

#for build & debug XRDP program
#2005 08 04
#create by ZAP @kouton
#out file ./debug/xrdp.exe


CP     = copy # xcopy /r /i
MAKE = nmake
DEL     = del /q/f


EXE = xrdp.exe

CPP = cl.exe
LINK32 = link.exe
LINK32_FLAGS=/nologo /subsystem:console /incremental:no /out:"$(EXE)"
#CPP_PROJ = -nologo -GR -GX -Zi -Zp1 -MD  -DDEBUG  -DWIN32 -D_CONSOLE # /Fr
CPP_PROJ=/nologo /EHsc /MDd /W3 /G5 /Zi /Od -D_DEBUG -DWIN32 -DWIN32_LEAN_AND_MEAN -D_CONSOLE -D_MBCS $(INCLUDE_DIRS) /FD /c

HEADERS = rdp.h /
constant.h

OBJS = xrdp.obj /
 rdp.obj

$(EXE) : $(OBJS)
 $(LINK32) $(LINK32_FLAGS) $(OBJS)


clean ::
 
-@$(DEL) $(EXE) $(OBJS) *.idb *.pdb
.cpp.obj::
   $(CPP) @<<
   $(CPP_PROJ) $<
<<

例子中第一部分 # 开头的就是代表这一行是注释,就像“//”

第二、三、四部分定义了一些宏,就像basic中不用生命变量而可以直接给一个变量赋值一样,这些宏最终都会以字符串的形式在后面的程序中被处理。

  第四部分第一行,末尾  /out:"$(EXE)"   $(EXE) 会把第三部分的 EXE 宏的内容读出 最后就变成:/out"xrdp.exe"

第五部分定义了我们的所用到的头文件,

第六部分是编译产生的obj文件名字(obj根据相应的.cpp .c产生)

第七部分说明一个依赖关系 也就是说 xrdp.exe依赖于 : 后面的 .obj产生 如果obj文件有更新的版本(时间),那么就要重新生成一次 exe。  $(LINK32) $(LINK32_FLAGS) $(OBJS) 则说明了生成的方法.(展开就知道是用前面的link.exe 连接的

用nmake clean 可以删除编译期间产生的临时文件……

最后

.cpp.obj::
   $(CPP) @<<
   $(CPP_PROJ) $<
<<

这个说明了所有cpp文件的生成方法, 而两个"<<" 之间的东西会被导入一个临时文件中,在命令行特别长的情况下 可以用这种方法来做

同样

$(EXE) : $(OBJS)
 $(LINK32) $(LINK32_FLAGS) $(OBJS)

也可以变成

$(EXE) : $(OBJS)
 $(LINK32) @<<
 $(LINK32_FLAGS) $(OBJS) $<
<<

makefile 有很多写法,不知道这种会不会造成重复编译……

不过这样有一定的通用性,又要开始学 cl 的参数了。

入门第二天……有错误请指正……

发布了33 篇原创文章 · 获赞 2 · 访问量 10万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章