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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章