Makefile on windows

转载 2013年12月02日 10:30:13

 

 

 

  1. #########################      Read Me     #########################  
  2. # 任何版本的vs都是支持makefile编译的  
  3. #   
  4. # Makefile文件中以#开始到行结束为注释  
  5. # 语法详见:  
  6. # http://msdn.microsoft.com/en-us/library/yz1tske6(v=VS.100).aspx  
  7.   
  8. # nmake的参数和使用方法  
  9. # NMAKE [option...] [macros...] [targets...] [@commandfile...]  
  10. # 详见:  
  11. # http://msdn.microsoft.com/en-us/library/a23f7tc4(v=VS.100).aspx  
  12.   
  13. # 使用本makefile编译可以使用命令  
  14. # nmake DBG=1  
  15. # nmake DBG=1 clean  
  16. # nmake DBG=1 rebuild  
  17. # nmake  
  18. # nmake clean  
  19. # nmake rebuild  
  20. #  
  21. # 用这个makefile编译任何C语言工程,只需要修改少量的几个配置即可  
  22. # TARGET, TARGET_EXT, DEFFILE, SRCS, LIBS, CFLAGS, LFLAGS   
  23.   
  24. ######################### Basic Definition #########################  
  25.   
  26. # 定义宏: 宏名=值  
  27. # 引用宏: $(宏名)  
  28. # 引用是通过字符串替换的方式进行的  
  29.   
  30. TARGET = abc # 定义宏 宏名=值  
  31. TARGET_EXT = dll  
  32. DEFFILE = abc.def  
  33. SRCS = ../base64/base64.c httpsend.c args.c dllmain.c  
  34.   
  35. # 如LIBS一行对LIBS宏进行赋值,同时也引用了LIBS宏  
  36. # 会先将宏展开,然后再赋值新的值给宏  
  37.   
  38. LIBS =  $(LIBS) advapi32.lib shell32.lib ws2_32.lib dnsapi.lib   
  39. CFLAGS = $(CFLAGS) /GS- -nologo -c -W3  
  40. LFLAGS = $(LFLAGS) -nologo -ORDER:@FunctionOrder /dll /def:$(DEFFILE)  
  41.   
  42. # 这是一种特殊的引用宏的方法,将SRCS宏值中所有的.c替换为.obj后,作为OBJS宏的值。  
  43. # 参考Macro Substitution  
  44. # http://msdn.microsoft.com/en-us/library/bsd42ets(v=VS.100).aspx  
  45. OBJS = $(SRCS:.c=.obj)  
  46.   
  47.   
  48. #################### Compile and Link Options #######################  
  49.   
  50. #### 判断是否定义了DBG宏,  
  51. #### 这里通过在nmake的选项中通过设置DBG宏来设置不同的编译链接选项  
  52. #### 其他可以使用的判断语句包括:!if   
  53. !ifdef DBG  
  54.   
  55. ODIR = ../debug  
  56. CFLAGS = $(CFLAGS) -Od -D_DEBUG -ZI -Gy  
  57. LFLAGS = $(LFLAGS) -map -debug  -PDB:$(ODIR)/$(TARGET)_$(TARGET_EXT).pdb  
  58.   
  59. !else  
  60.   
  61. ODIR = ../release  
  62. CFLAGS = $(CFLAGS) -Od -DNDEBUG -Gy  
  63. LFLAGS = $(LFLAGS)   
  64.   
  65. !endif  
  66.   
  67.   
  68. #########################  Inference Rules  #########################  
  69. #  
  70. # Description blocks(描述块)的语法规则:  
  71. #  
  72. # 目标: 依赖项  
  73. #   命令  
  74. #  
  75. # 表示生成“目标”需呀依赖于“依赖项”,生成使用“命令”  
  76. # 运行nmake时需要指明生成的目标,如果没有说明,默认为makefile中的第一个目标。  
  77. # 依赖项和命令是可选的  
  78.   
  79. all : $(ODIR)/$(TARGET).$(TARGET_EXT) $(ODIR)  
  80.   
  81. # 在代码位于不同文件夹的时候,为了生成obj文件和.c文件在同一个目录,需要使用Fo选项指定obj文件输出目录。  
  82. # 这里使用了Macro Substitution的方式来定义OBJS,因为我不想写很多$(ODIR)/  
  83. # 如果不指定路径,无论c文件在那里,生成的obj文件都在./也就是proj文件所在目录  
  84. # 设置了Fo并且用了D修饰服,这时不能使用Batch-mode(::)  
  85. # Batch-mode和非Batch的区别是在预定义推导规则的后是使用:还是::  
  86. # D宏修饰符表示文件名宏中的目录部分(去掉文件名和扩展名剩下的部分)  
  87. # batch-mode rules 详见:  
  88. # http://msdn.microsoft.com/en-us/library/f2x0zs74(v=VS.100).aspx  
  89. # 预定义的推导规则(描述块):  
  90. # http://msdn.microsoft.com/en-us/library/cx06ysxh.aspx  
  91. # 文件名宏:  
  92. # http://msdn.microsoft.com/en-us/library/cbes8ded.aspx  
  93.   
  94. .c.obj:  
  95.     cl $(CFLAGS) /Fo$(<D)/ $< #编译  
  96.   
  97.   
  98. $(ODIR)/$(TARGET).$(TARGET_EXT) : $(ODIR)  $(OBJS) $(DEFFILE)  
  99.     link -out:$(ODIR)/$(TARGET).$(TARGET_EXT) $(LFLAGS) $(OBJS) $(LIBS) #链接  
  100.   
  101.   
  102. $(ODIR):  
  103.     md $(ODIR) #创建目录  
  104.   
  105. clean :  
  106.     del /q $(OBJS) $(ODIR)/$(TARGET).$(TARGET_EXT) $(ODIR)/$(TARGET)_$(TARGET_EXT).pdb  
  107.   
  108. # rebuild,先clean再all,即为rebuild  
  109. rebuild : clean all   

 

windows7下makefile例程

最近因为工作关系需要接触makefile,感觉在dos窗口下输入一个make后就可以等着目标文件生成的感觉还是很舒服的,相比原来使用IDE开发,我觉得makefile让我对编译过程有了进一步的了解。 ...
  • u010464679
  • u010464679
  • 2016年07月28日 15:00
  • 2589

windows 下使用makefile(二)---- 编译

1.Dos下运行VC++自带的Nmake,设置路径 ========================================== ●C/C++ 编译器需要的环境变数设定古早以来,PC 上的 ...
  • xiexievv
  • xiexievv
  • 2013年01月06日 23:41
  • 8515

Windows下的命令编译与Makefile

一般来说在程序编译的中,无论是C、C++,首先要把源文件编译成中间代码文件,在Windows下是 .obj 文件(UNIX下是 .o 文件),即 Object File,这个动作叫做编译(compil...
  • perry_xiao
  • perry_xiao
  • 2011年12月01日 20:48
  • 4939

分享个windows下的makefile

直接上代码::insertSOURCE = test.cpp# OpenCV version OpenCV_VER = 2.4.10 # visual c++ version for OpenCV :...
  • bendanban
  • bendanban
  • 2017年03月05日 13:43
  • 686

window下通过makefile 文件编译C/C++源文件(Scintilla的windows例子)

今天从网上下载了一个Scintilla的例子,发现里面所带的C++窗口例子是通过makefile文件进行编译的,以前编译都是通过IDE环境,配置好后进行编译的,还真没用过makefile编译过文件,于...
  • Baple
  • Baple
  • 2010年06月03日 17:22
  • 6133

Windows安装GNU编译器使用makefile

Windows安装GNU编译器使用makefile 一、下载安装MinGW MinGW下载网页:http://sourceforge.net/projects/mingw/files/latest...
  • pdcxs007
  • pdcxs007
  • 2013年02月16日 12:52
  • 45733

windows与makefile中的环境变量传递

1.在windows下设置环境变量 写个.bat文件,set VAR=D:\。 在windows下查看环境变量 第一种:set VAR 第二种:echo %VAR%...
  • qingfengtsing
  • qingfengtsing
  • 2014年03月15日 07:17
  • 3108

windows下使用makefile编译C语言.doc

1.       准备工作:程序:MinGW-3.1.0-1.exe      windows下的gcc,编译c语言的工具下载地址: http://umn.dl.sourceforge.net/sou...
  • zhanghan3
  • zhanghan3
  • 2006年10月14日 14:29
  • 12626

windows下makefile 使用配置以及GCC安装方法

安装GCC 1.下载MinGW(MinGW是指只用自由软件来生成纯粹的Win32可执行文件的编译环境,它是Minimalist GNU on Windows的略称)。 2. 配置环境变...
  • hubaolin
  • hubaolin
  • 2012年12月27日 09:06
  • 1933

Windows环境的GNU安装以及使用makefile编译生成*.exe

Windows安装GNU编译器使用makefile
  • mimica
  • mimica
  • 2017年10月23日 12:53
  • 152
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Makefile on windows
举报原因:
原因补充:

(最多只允许输入30个字)