1. #############################################################
  2. # Generic Makefile for C/C++ Program
  3. #
  4. # License: GPL (General Public License)
  5. # Author: whyglinux <whyglinux AT gmail DOT com>
  6. # Date: 2006/03/04 (version 0.1)
  7. # 2007/03/24 (version 0.2)
  8. # 2007/04/09 (version 0.3)
  9. # 2007/06/26 (version 0.4)
  10. # 2008/04/05 (version 0.5)
  11. #
  12. # Description:
  13. # ------------
  14. # This is an easily customizable makefile template. The purpose is to
  15. # provide an instant building environment for C/C++ programs.
  16. #
  17. # It searches all the C/C++ source files in the specified directories,
  18. # makes dependencies, compiles and links to form an executable.
  19. #
  20. # Besides its default ability to build C/C++ programs which use only
  21. # standard C/C++ libraries, you can customize the Makefile to build
  22. # those using other libraries. Once done, without any changes you can
  23. # then build programs using the same or less libraries, even if source
  24. # files are renamed, added or removed. Therefore, it is particularly
  25. # convenient to use it to build codes for experimental or study use.
  26. #
  27. # GNU make is expected to use the Makefile. Other versions of makes
  28. # may or may not work.
  29. #
  30. # Usage:
  31. # ------
  32. # 1. Copy the Makefile to your program directory.
  33. # 2. Customize in the "Customizable Section" only if necessary:
  34. # * to use non-standard C/C++ libraries, set pre-processor or compiler
  35. # options to <MY_CFLAGS> and linker ones to <MY_LIBS>
  36. # (See Makefile.gtk+-2.0 for an example)
  37. # * to search sources in more directories, set to <SRCDIRS>
  38. # * to specify your favorite program name, set to <PROGRAM>
  39. # 3. Type make to start building your program.
  40. #
  41. # Make Target:
  42. # ------------
  43. # The Makefile provides the following targets to make:
  44. # $ make compile and link
  45. # $ make NODEP=yes compile and link without generating dependencies
  46. # $ make objs compile only (no linking)
  47. # $ make tags create tags for Emacs editor
  48. # $ make ctags create ctags for VI editor
  49. # $ make clean clean objects and the executable file
  50. # $ make distclean clean objects, the executable and dependencies
  51. # $ make help get the usage of the makefile
  52. #
  53. #===========================================================================
  54.  
  55. ## Customizable Section: adapt those variables to suit your program.
  56. ##==========================================================================
  57.  
  58. # The pre-processor and compiler options.
  59. MY_CFLAGS = -I/home/anker/project/myssl/include
  60.  
  61. # The linker options.
  62. MY_LIBS = -L/home/anker/project/myssl/lib -lssl -lcrypto
  63.  
  64. # The pre-processor options used by the cpp (man cpp for more).
  65. CPPFLAGS = -Wall
  66.  
  67. # The options used in linking as well as in any direct use of ld.
  68. LDFLAGS =
  69.  
  70. # The directories in which source files reside.
  71. # If not specified, only the current directory will be serached.
  72. SRCDIRS =
  73.  
  74. # The executable file name.
  75. # If not specified, current directory name or `a.out' will be used.
  76. PROGRAM =client
  77.  
  78. ## Implicit Section: change the following only when necessary.
  79. ##==========================================================================
  80.  
  81. # The source file types (headers excluded).
  82. # .c indicates C source files, and others C++ ones.
  83. SRCEXTS = .c .C .cc .cpp .CPP .c++ .cxx .cp
  84.  
  85. # The header file types.
  86. HDREXTS = .h .H .hh .hpp .HPP .h++ .hxx .hp
  87.  
  88. # The pre-processor and compiler options.
  89. # Users can override those variables from the command line.
  90. CFLAGS = -g -O2
  91. CXXFLAGS= -g -O2
  92.  
  93. # The C program compiler.
  94. #CC = gcc
  95.  
  96. # The C++ program compiler.
  97. #CXX = g++
  98.  
  99. # Un-comment the following line to compile C programs as C++ ones.
  100. #CC = $(CXX)
  101.  
  102. # The command used to delete file.
  103. #RM = rm -f
  104.  
  105. ETAGS = etags
  106. ETAGSFLAGS =
  107.  
  108. CTAGS = ctags
  109. CTAGSFLAGS =
  110.  
  111. ## Stable Section: usually no need to be changed. But you can add more.
  112. ##==========================================================================
  113. SHELL = /bin/sh
  114. EMPTY =
  115. SPACE = $(EMPTY) $(EMPTY)
  116. ifeq ($(PROGRAM),)
  117. CUR_PATH_NAMES = $(subst /,$(SPACE),$(subst $(SPACE),_,$(CURDIR)))
  118. PROGRAM = $(word $(words $(CUR_PATH_NAMES)),$(CUR_PATH_NAMES))
  119. ifeq ($(PROGRAM),)
  120. PROGRAM = a.out
  121. endif
  122. endif
  123. ifeq ($(SRCDIRS),)
  124. SRCDIRS = .
  125. endif
  126. SOURCES = $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))
  127. HEADERS = $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(HDREXTS))))
  128. SRC_CXX = $(filter-out %.c,$(SOURCES))
  129. OBJS = $(addsuffix .o, $(basename $(SOURCES)))
  130. DEPS = $(OBJS:.o=.d)
  131.  
  132. ## Define some useful variables.
  133. DEP_OPT = $(shell if `$(CC) --version | grep "GCC" >/dev/null`; then \
  134. echo "-MM -MP"; else echo "-M"; fi )
  135. DEPEND = $(CC) $(DEP_OPT) $(MY_CFLAGS) $(CFLAGS) $(CPPFLAGS)
  136. DEPEND.d = $(subst -g ,,$(DEPEND))
  137. COMPILE.c = $(CC) $(MY_CFLAGS) $(CFLAGS) $(CPPFLAGS) -c
  138. COMPILE.cxx = $(CXX) $(MY_CFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c
  139. LINK.c = $(CC) $(MY_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)
  140. LINK.cxx = $(CXX) $(MY_CFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS)
  141.  
  142. .PHONY: all objs tags ctags clean distclean help show
  143.  
  144. # Delete the default suffixes
  145. .SUFFIXES:
  146.  
  147. all: $(PROGRAM)
  148.  
  149. # Rules for creating dependency files (.d).
  150. #------------------------------------------
  151.  
  152. %.d:%.c
  153. @echo -n $(dir $<) > $@
  154. @$(DEPEND.d) $< >> $@
  155.  
  156. %.d:%.C
  157. @echo -n $(dir $<) > $@
  158. @$(DEPEND.d) $< >> $@
  159.  
  160. %.d:%.cc
  161. @echo -n $(dir $<) > $@
  162. @$(DEPEND.d) $< >> $@
  163.  
  164. %.d:%.cpp
  165. @echo -n $(dir $<) > $@
  166. @$(DEPEND.d) $< >> $@
  167.  
  168. %.d:%.CPP
  169. @echo -n $(dir $<) > $@
  170. @$(DEPEND.d) $< >> $@
  171.  
  172. %.d:%.c++
  173. @echo -n $(dir $<) > $@
  174. @$(DEPEND.d) $< >> $@
  175.  
  176. %.d:%.cp
  177. @echo -n $(dir $<) > $@
  178. @$(DEPEND.d) $< >> $@
  179.  
  180. %.d:%.cxx
  181. @echo -n $(dir $<) > $@
  182. @$(DEPEND.d) $< >> $@
  183.  
  184. # Rules for generating object files (.o).
  185. #----------------------------------------
  186. objs:$(OBJS)
  187.  
  188. %.o:%.c
  189. $(COMPILE.c) $< -o $@
  190.  
  191. %.o:%.C
  192. $(COMPILE.cxx) $< -o $@
  193.  
  194. %.o:%.cc
  195. $(COMPILE.cxx) $< -o $@
  196.  
  197. %.o:%.cpp
  198. $(COMPILE.cxx) $< -o $@
  199.  
  200. %.o:%.CPP
  201. $(COMPILE.cxx) $< -o $@
  202.  
  203. %.o:%.c++
  204. $(COMPILE.cxx) $< -o $@
  205.  
  206. %.o:%.cp
  207. $(COMPILE.cxx) $< -o $@
  208.  
  209. %.o:%.cxx
  210. $(COMPILE.cxx) $< -o $@
  211.  
  212. # Rules for generating the tags.
  213. #-------------------------------------
  214. tags: $(HEADERS) $(SOURCES)
  215. $(ETAGS) $(ETAGSFLAGS) $(HEADERS) $(SOURCES)
  216.  
  217. ctags: $(HEADERS) $(SOURCES)
  218. $(CTAGS) $(CTAGSFLAGS) $(HEADERS) $(SOURCES)
  219.  
  220. # Rules for generating the executable.
  221. #-------------------------------------
  222. $(PROGRAM):$(OBJS)
  223. ifeq ($(SRC_CXX),) # C program
  224. $(LINK.c) $(OBJS) $(MY_LIBS) -o $@
  225. @echo Type ./$@ to execute the program.
  226. else # C++ program
  227. $(LINK.cxx) $(OBJS) $(MY_LIBS) -o $@
  228. @echo Type ./$@ to execute the program.
  229. endif
  230.  
  231. ifndef NODEP
  232. ifneq ($(DEPS),)
  233. sinclude $(DEPS)
  234. endif
  235. endif
  236.  
  237. clean:
  238. $(RM) $(OBJS) $(PROGRAM) $(PROGRAM).exe
  239.  
  240. distclean: clean
  241. $(RM) $(DEPS) TAGS
  242.  
  243. # Show help.
  244. help:
  245. @echo 'Generic Makefile for C/C++ Programs (gcmakefile) version 0.5'
  246. @echo 'Copyright (C) 2007, 2008 whyglinux <whyglinux@hotmail.com>'
  247. @echo
  248. @echo 'Usage: make [TARGET]'
  249. @echo 'TARGETS:'
  250. @echo ' all (=make) compile and link.'
  251. @echo ' NODEP=yes make without generating dependencies.'
  252. @echo ' objs compile only (no linking).'
  253. @echo ' tags create tags for Emacs editor.'
  254. @echo ' ctags create ctags for VI editor.'
  255. @echo ' clean clean objects and the executable file.'
  256. @echo ' distclean clean objects, the executable and dependencies.'
  257. @echo ' show show variables (for debug use only).'
  258. @echo ' help print this message.'
  259. @echo
  260. @echo 'Report bugs to <whyglinux AT gmail DOT com>.'
  261.  
  262. # Show variables (for debug use only.)
  263. show:
  264. @echo 'PROGRAM :' $(PROGRAM)
  265. @echo 'SRCDIRS :' $(SRCDIRS)
  266. @echo 'HEADERS :' $(HEADERS)
  267. @echo 'SOURCES :' $(SOURCES)
  268. @echo 'SRC_CXX :' $(SRC_CXX)
  269. @echo 'OBJS :' $(OBJS)
  270. @echo 'DEPS :' $(DEPS)
  271. @echo 'DEPEND :' $(DEPEND)
  272. @echo 'COMPILE.c :' $(COMPILE.c)
  273. @echo 'COMPILE.cxx :' $(COMPILE.cxx)
  274. @echo 'link.c :' $(LINK.c)
  275. @echo 'link.cxx :' $(LINK.cxx)
  276.  
  277. ## End of the Makefile ## Suggestions are welcome ## All rights reserved ##
  278. ##############################################################

  

保存一个经常用的Makefile的更多相关文章

  1. 一步一步写一个简单通用的makefile(一)

    经常会用写一些小的程序有的是作为测试,但是每次都需要写一些简单的GCC 命令,有的时候移植一些项目中的部分代码到小程序里面进行测试,这个时候GCC 命令并不好些,如果写啦一个比较常用的makefile ...

  2. 向大家推荐一个C/C++通用Makefile

    在使用 Makefile 之前,只需对它进行一些简单的设置即可:而且一经设置,即使以后对源程序文件有所增减一般也不再需要改动 Makefile.因此,即便是一个没有学习过 Makefile 书写规则的 ...

  3. 一个简单的通用Makefile实现

    一个简单的通用Makefile实现   Makefile是Linux下程序开发的自动化编译工具,一个好的Makefile应该准确的识别编译目标与源文件的依赖关系,并且有着高效的编译效率,即每次重新ma ...

  4. [置顶] 自己写一个简单通用的Makefile

    转自:http://blog.csdn.net/u011913612/article/details/52102241 一.makefile的作用 Makefile是用于自动编译和链接的,一个工程有很 ...

  5. HTML之:fieldset——一个不常用的HTML标签

    2016年4月14日17:10:02记录 一个不常用的HTML标签fieldset,不过我觉得比较有意思,其语法如下: <fieldset><legend>fieldset名称 ...

  6. 一步一步写一个简单通用的makefile(三)

    上一篇一步一步写一个简单通用的makefile(二) 里面的makefile 实现对通用的代码进行编译,这一章我将会对上一次的makefile 进行进一步的优化. 优化后的makefile: #Hel ...

  7. django保存一个object的时候会发出信号

    当django保存一个object的时候会发出一系列的signals,可以通过对这些signals注册listener,从而相应的signal发出时执行一定的代码. from django.core. ...

  8. 转载:给bash的提示符设置不同的颜色 一个很常用的功能,效果如下:

    原文来自:http://www.cnblogs.com/cyttina/archive/2013/01/08/2850406.html 一个很常用的功能,效果如下: 这样就可以很轻易的将输入的指令和其 ...

  9. 老大写得一个非常高大上的Makefile,包括非常多语法:

    一个非常高大上的Makefile,包括非常多语法: TARGET = api-login INSTALL_PATH = /huishoubao/cgi include ../../implements ...

随机推荐

  1. P1514 引水入城 DFS

    题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个NN 行\times M×M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市 ...

  2. 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。

    该题还是考杨辉三角计算,只不过最后每一行都放入List集合中,然后返回,直接看代码: public static List<List<Integer>> generate(in ...

  3. 049 DSL语句

    1.说明 2.sql程序 package com.scala.it import org.apache.spark.sql.hive.HiveContext import org.apache.spa ...

  4. css上传图片中等待不可点击效果

    <!DOCTYPE html> <html> <head> <title>上传中</title> <style type=" ...

  5. Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码)

    Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码)    转 https://blog.csdn.net/lhl1124281072/article/details/800 ...

  6. 笔记-JS高级程序设计-BOM篇

    BOM提供了很多对象,用于访问浏览器的功能.这些功能与任何网页无关. 1BOM的核心对象是window,它代表浏览器的一个实例,它是通过JS访问浏览器窗口的一个借口,同时又是ECMAScript规定的 ...

  7. React-Native + Genymotion android开发环境搭建

    1.解压android-sdk_r24.3.4-windows.zip放到一个空间大的开发盘中 2.添加环境变量,路径时 ANDROID_HOME D:\Android\android-sdk-win ...

  8. antd + node.js + mongoose小总结

    最近开发太忙,都没时间更新博客,想通过这篇博客总结一下相关经验,以备后续能用到: 一.antd 1.onChange of undefined问题:可能是页面中表单取了相同的名称,也可能是在遍历时表单 ...

  9. Intellij IDEA实现SpringBoot项目多端口启动

    前言 有时候使用springboot项目时遇到这样一种情况,用一个项目需要复制很多遍进行测试,除了端口号不同以外,没有任何不同.这时我们强大的Intellij IDEA就能替我们实现. 实现方法 第一 ...

  10. 路由网关---zuul

    Zuul:Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架.Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门. 在微服务盛行的时代,客户端与系统之 ...