一个makefile如下,我看不懂,请高手帮忙解释一下,谢谢!#
# Chapter 5 - Makefile
#
#
# Flags - Always compiles debug.
#
CPP_FLAGS=/c /MTd /Zi /Od /D_DEBUG
EXE_LINK_FLAGS=/DEBUG
DLL_LINK_FLAGS=/DLL /DEBUGLIBS=UUID.lib#################################################
#
# Targets
#
all : clients componentsclients : Client1.exe Client2.exe Client3.execomponents : Cmpnt1.dll Cmpnt2.dll Cmpnt3.dll
#################################################
#
# Shared source files
#GUIDs.obj : GUIDs.cpp
cl $(CPP_FLAGS) GUIDs.cpp#################################################
#
# Component source files
#Cmpnt1.obj : Cmpnt1.cpp Iface.h
cl $(CPP_FLAGS) Cmpnt1.cppCmpnt2.obj : Cmpnt2.cpp Iface.h
cl $(CPP_FLAGS) Cmpnt2.cppCmpnt3.obj : Cmpnt3.cpp Iface.h
cl $(CPP_FLAGS) Cmpnt3.cpp
#################################################
#
# Client source files
## Shared File
Create.obj : Create.cpp Create.h
cl $(CPP_FLAGS) Create.cppClient1.obj : Client1.cpp Iface.h Create.h
cl $(CPP_FLAGS) Client1.cppClient2.obj : Client2.cpp Iface.h Create.h
cl $(CPP_FLAGS) Client2.cppClient3.obj : Client3.cpp Iface.h Create.h
cl $(CPP_FLAGS) Client3.cpp#################################################
#
# Link components.
#Cmpnt1.dll : Cmpnt1.obj GUIDs.obj Cmpnt1.def
link $(DLL_LINK_FLAGS) Cmpnt1.obj GUIDs.obj $(LIBS) /DEF:Cmpnt1.def Cmpnt2.dll : Cmpnt2.obj GUIDs.obj Cmpnt2.def
link $(DLL_LINK_FLAGS) Cmpnt2.obj GUIDs.obj $(LIBS) /DEF:Cmpnt2.def Cmpnt3.dll : Cmpnt3.obj GUIDs.obj Cmpnt3.def
link $(DLL_LINK_FLAGS) Cmpnt3.obj GUIDs.obj $(LIBS) /DEF:Cmpnt3.def #################################################
#
# Link clients.
#Client1.exe : Client1.obj Create.obj GUIDs.obj
link $(EXE_LINK_FLAGS) Client1.obj Create.obj GUIDs.obj $(LIBS)Client2.exe : Client2.obj Create.obj GUIDs.obj
link $(EXE_LINK_FLAGS) Client2.obj Create.obj GUIDs.obj $(LIBS)Client3.exe : Client3.obj Create.obj GUIDs.obj
link $(EXE_LINK_FLAGS) Client3.obj Create.obj GUIDs.obj $(LIBS)
# Chapter 5 - Makefile
#
#
# Flags - Always compiles debug.
#
CPP_FLAGS=/c /MTd /Zi /Od /D_DEBUG
EXE_LINK_FLAGS=/DEBUG
DLL_LINK_FLAGS=/DLL /DEBUGLIBS=UUID.lib#################################################
#
# Targets
#
all : clients componentsclients : Client1.exe Client2.exe Client3.execomponents : Cmpnt1.dll Cmpnt2.dll Cmpnt3.dll
#################################################
#
# Shared source files
#GUIDs.obj : GUIDs.cpp
cl $(CPP_FLAGS) GUIDs.cpp#################################################
#
# Component source files
#Cmpnt1.obj : Cmpnt1.cpp Iface.h
cl $(CPP_FLAGS) Cmpnt1.cppCmpnt2.obj : Cmpnt2.cpp Iface.h
cl $(CPP_FLAGS) Cmpnt2.cppCmpnt3.obj : Cmpnt3.cpp Iface.h
cl $(CPP_FLAGS) Cmpnt3.cpp
#################################################
#
# Client source files
## Shared File
Create.obj : Create.cpp Create.h
cl $(CPP_FLAGS) Create.cppClient1.obj : Client1.cpp Iface.h Create.h
cl $(CPP_FLAGS) Client1.cppClient2.obj : Client2.cpp Iface.h Create.h
cl $(CPP_FLAGS) Client2.cppClient3.obj : Client3.cpp Iface.h Create.h
cl $(CPP_FLAGS) Client3.cpp#################################################
#
# Link components.
#Cmpnt1.dll : Cmpnt1.obj GUIDs.obj Cmpnt1.def
link $(DLL_LINK_FLAGS) Cmpnt1.obj GUIDs.obj $(LIBS) /DEF:Cmpnt1.def Cmpnt2.dll : Cmpnt2.obj GUIDs.obj Cmpnt2.def
link $(DLL_LINK_FLAGS) Cmpnt2.obj GUIDs.obj $(LIBS) /DEF:Cmpnt2.def Cmpnt3.dll : Cmpnt3.obj GUIDs.obj Cmpnt3.def
link $(DLL_LINK_FLAGS) Cmpnt3.obj GUIDs.obj $(LIBS) /DEF:Cmpnt3.def #################################################
#
# Link clients.
#Client1.exe : Client1.obj Create.obj GUIDs.obj
link $(EXE_LINK_FLAGS) Client1.obj Create.obj GUIDs.obj $(LIBS)Client2.exe : Client2.obj Create.obj GUIDs.obj
link $(EXE_LINK_FLAGS) Client2.obj Create.obj GUIDs.obj $(LIBS)Client3.exe : Client3.obj Create.obj GUIDs.obj
link $(EXE_LINK_FLAGS) Client3.obj Create.obj GUIDs.obj $(LIBS)
解决方案 »
- 有谁知道 <<成都天翼万通>> 这个公司?
- flash转avi,mpeg,和连续图片
- 请教:variant转换为CSting后,字符串后面带有很多空字符,怎么把后面的空字符取消掉?
- 为什么在XP中不能结束进程
- 在DIRECTSHOW编程中如何实现全屏
- BUG: WTL7及WTL7.1中的资源泄露
- 请问为什么不能删除一务记录
- 界面设计的方法和原则
- 如何将一个数据库导为文本文件,然后将文本文件恢复成数据库!用vc编写
- 哪位达人对WTL比较熟悉?
- 如何实现在网页中下载完一个ActiveX的时候自动执行一个下载功能,下载指定的文件
- 建議版主把 ZhouEnLai6 的賬號封掉,光這名字我就看著反胃,你還真以為你是周 恩 來啊???
Cmpnt1.obj : Cmpnt1.cpp Iface.h
cl $(CPP_FLAGS) Cmpnt1.cpp
obj文件依赖Cmpnt1.cpp IFace.h,通过编译Cmpnt1.cpp生成,编译的过程把头文件Iface.h引入。
2. 链接
Cmpnt1.dll : Cmpnt1.obj GUIDs.obj Cmpnt1.def
link $(DLL_LINK_FLAGS) Cmpnt1.obj GUIDs.obj $(LIBS) /DEF:Cmpnt1.def
通过链接对象文件和def文件生成dll
3. 链接
Client3.exe : Client3.obj Create.obj GUIDs.obj
link $(EXE_LINK_FLAGS) Client3.obj Create.obj GUIDs.obj $(LIBS)
通过链接对象文件和库文件生成exe
link.exe
是编译器命令行工具
// 编译选项 具体的差 msdn 应该是debug 版本,输出调试符号 多线程 需要连接 msvctxx.dl, 忘了,自己查 msdnCmpnt1.obj : Cmpnt1.cpp Iface.h
cl $(CPP_FLAGS) Cmpnt1.cpp //是 makefile 的规则, cl 编译参数 cc.cpp 文件, 目的是 将其编译成 coff 格式的 .obj 文件, 只检查一般的语法错误 Cmpnt1.dll : Cmpnt1.obj GUIDs.obj Cmpnt1.def
link $(DLL_LINK_FLAGS) Cmpnt1.obj GUIDs.obj $(LIBS) /DEF:Cmpnt1.def
// 将 具体的 obj 按 xx.def 规定的连接成 dll ,检查声明的函数是否实行Client3.exe : Client3.obj Create.obj GUIDs.obj
link $(EXE_LINK_FLAGS) Client3.obj Create.obj GUIDs.obj $(LIBS)
// ....可以参考
http://blog.csdn.net/newkey007/archive/2004/10/19/142324.aspx
和
http://blog.csdn.net/newkey007/archive/2004/10/24/149835.aspx