保存一个经常用的Makefile
- #############################################################
- # Generic Makefile for C/C++ Program
- #
- # License: GPL (General Public License)
- # Author: whyglinux <whyglinux AT gmail DOT com>
- # Date: 2006/03/04 (version 0.1)
- # 2007/03/24 (version 0.2)
- # 2007/04/09 (version 0.3)
- # 2007/06/26 (version 0.4)
- # 2008/04/05 (version 0.5)
- #
- # Description:
- # ------------
- # This is an easily customizable makefile template. The purpose is to
- # provide an instant building environment for C/C++ programs.
- #
- # It searches all the C/C++ source files in the specified directories,
- # makes dependencies, compiles and links to form an executable.
- #
- # Besides its default ability to build C/C++ programs which use only
- # standard C/C++ libraries, you can customize the Makefile to build
- # those using other libraries. Once done, without any changes you can
- # then build programs using the same or less libraries, even if source
- # files are renamed, added or removed. Therefore, it is particularly
- # convenient to use it to build codes for experimental or study use.
- #
- # GNU make is expected to use the Makefile. Other versions of makes
- # may or may not work.
- #
- # Usage:
- # ------
- # 1. Copy the Makefile to your program directory.
- # 2. Customize in the "Customizable Section" only if necessary:
- # * to use non-standard C/C++ libraries, set pre-processor or compiler
- # options to <MY_CFLAGS> and linker ones to <MY_LIBS>
- # (See Makefile.gtk+-2.0 for an example)
- # * to search sources in more directories, set to <SRCDIRS>
- # * to specify your favorite program name, set to <PROGRAM>
- # 3. Type make to start building your program.
- #
- # Make Target:
- # ------------
- # The Makefile provides the following targets to make:
- # $ make compile and link
- # $ make NODEP=yes compile and link without generating dependencies
- # $ make objs compile only (no linking)
- # $ make tags create tags for Emacs editor
- # $ make ctags create ctags for VI editor
- # $ make clean clean objects and the executable file
- # $ make distclean clean objects, the executable and dependencies
- # $ make help get the usage of the makefile
- #
- #===========================================================================
- ## Customizable Section: adapt those variables to suit your program.
- ##==========================================================================
- # The pre-processor and compiler options.
- MY_CFLAGS = -I/home/anker/project/myssl/include
- # The linker options.
- MY_LIBS = -L/home/anker/project/myssl/lib -lssl -lcrypto
- # The pre-processor options used by the cpp (man cpp for more).
- CPPFLAGS = -Wall
- # The options used in linking as well as in any direct use of ld.
- LDFLAGS =
- # The directories in which source files reside.
- # If not specified, only the current directory will be serached.
- SRCDIRS =
- # The executable file name.
- # If not specified, current directory name or `a.out' will be used.
- PROGRAM =client
- ## Implicit Section: change the following only when necessary.
- ##==========================================================================
- # The source file types (headers excluded).
- # .c indicates C source files, and others C++ ones.
- SRCEXTS = .c .C .cc .cpp .CPP .c++ .cxx .cp
- # The header file types.
- HDREXTS = .h .H .hh .hpp .HPP .h++ .hxx .hp
- # The pre-processor and compiler options.
- # Users can override those variables from the command line.
- CFLAGS = -g -O2
- CXXFLAGS= -g -O2
- # The C program compiler.
- #CC = gcc
- # The C++ program compiler.
- #CXX = g++
- # Un-comment the following line to compile C programs as C++ ones.
- #CC = $(CXX)
- # The command used to delete file.
- #RM = rm -f
- ETAGS = etags
- ETAGSFLAGS =
- CTAGS = ctags
- CTAGSFLAGS =
- ## Stable Section: usually no need to be changed. But you can add more.
- ##==========================================================================
- SHELL = /bin/sh
- EMPTY =
- SPACE = $(EMPTY) $(EMPTY)
- ifeq ($(PROGRAM),)
- CUR_PATH_NAMES = $(subst /,$(SPACE),$(subst $(SPACE),_,$(CURDIR)))
- PROGRAM = $(word $(words $(CUR_PATH_NAMES)),$(CUR_PATH_NAMES))
- ifeq ($(PROGRAM),)
- PROGRAM = a.out
- endif
- endif
- ifeq ($(SRCDIRS),)
- SRCDIRS = .
- endif
- SOURCES = $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))
- HEADERS = $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(HDREXTS))))
- SRC_CXX = $(filter-out %.c,$(SOURCES))
- OBJS = $(addsuffix .o, $(basename $(SOURCES)))
- DEPS = $(OBJS:.o=.d)
- ## Define some useful variables.
- DEP_OPT = $(shell if `$(CC) --version | grep "GCC" >/dev/null`; then \
- echo "-MM -MP"; else echo "-M"; fi )
- DEPEND = $(CC) $(DEP_OPT) $(MY_CFLAGS) $(CFLAGS) $(CPPFLAGS)
- DEPEND.d = $(subst -g ,,$(DEPEND))
- COMPILE.c = $(CC) $(MY_CFLAGS) $(CFLAGS) $(CPPFLAGS) -c
- COMPILE.cxx = $(CXX) $(MY_CFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c
- LINK.c = $(CC) $(MY_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)
- LINK.cxx = $(CXX) $(MY_CFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS)
- .PHONY: all objs tags ctags clean distclean help show
- # Delete the default suffixes
- .SUFFIXES:
- all: $(PROGRAM)
- # Rules for creating dependency files (.d).
- #------------------------------------------
- %.d:%.c
- @echo -n $(dir $<) > $@
- @$(DEPEND.d) $< >> $@
- %.d:%.C
- @echo -n $(dir $<) > $@
- @$(DEPEND.d) $< >> $@
- %.d:%.cc
- @echo -n $(dir $<) > $@
- @$(DEPEND.d) $< >> $@
- %.d:%.cpp
- @echo -n $(dir $<) > $@
- @$(DEPEND.d) $< >> $@
- %.d:%.CPP
- @echo -n $(dir $<) > $@
- @$(DEPEND.d) $< >> $@
- %.d:%.c++
- @echo -n $(dir $<) > $@
- @$(DEPEND.d) $< >> $@
- %.d:%.cp
- @echo -n $(dir $<) > $@
- @$(DEPEND.d) $< >> $@
- %.d:%.cxx
- @echo -n $(dir $<) > $@
- @$(DEPEND.d) $< >> $@
- # Rules for generating object files (.o).
- #----------------------------------------
- objs:$(OBJS)
- %.o:%.c
- $(COMPILE.c) $< -o $@
- %.o:%.C
- $(COMPILE.cxx) $< -o $@
- %.o:%.cc
- $(COMPILE.cxx) $< -o $@
- %.o:%.cpp
- $(COMPILE.cxx) $< -o $@
- %.o:%.CPP
- $(COMPILE.cxx) $< -o $@
- %.o:%.c++
- $(COMPILE.cxx) $< -o $@
- %.o:%.cp
- $(COMPILE.cxx) $< -o $@
- %.o:%.cxx
- $(COMPILE.cxx) $< -o $@
- # Rules for generating the tags.
- #-------------------------------------
- tags: $(HEADERS) $(SOURCES)
- $(ETAGS) $(ETAGSFLAGS) $(HEADERS) $(SOURCES)
- ctags: $(HEADERS) $(SOURCES)
- $(CTAGS) $(CTAGSFLAGS) $(HEADERS) $(SOURCES)
- # Rules for generating the executable.
- #-------------------------------------
- $(PROGRAM):$(OBJS)
- ifeq ($(SRC_CXX),) # C program
- $(LINK.c) $(OBJS) $(MY_LIBS) -o $@
- @echo Type ./$@ to execute the program.
- else # C++ program
- $(LINK.cxx) $(OBJS) $(MY_LIBS) -o $@
- @echo Type ./$@ to execute the program.
- endif
- ifndef NODEP
- ifneq ($(DEPS),)
- sinclude $(DEPS)
- endif
- endif
- clean:
- $(RM) $(OBJS) $(PROGRAM) $(PROGRAM).exe
- distclean: clean
- $(RM) $(DEPS) TAGS
- # Show help.
- help:
- @echo 'Generic Makefile for C/C++ Programs (gcmakefile) version 0.5'
- @echo 'Copyright (C) 2007, 2008 whyglinux <whyglinux@hotmail.com>'
- @echo
- @echo 'Usage: make [TARGET]'
- @echo 'TARGETS:'
- @echo ' all (=make) compile and link.'
- @echo ' NODEP=yes make without generating dependencies.'
- @echo ' objs compile only (no linking).'
- @echo ' tags create tags for Emacs editor.'
- @echo ' ctags create ctags for VI editor.'
- @echo ' clean clean objects and the executable file.'
- @echo ' distclean clean objects, the executable and dependencies.'
- @echo ' show show variables (for debug use only).'
- @echo ' help print this message.'
- @echo
- @echo 'Report bugs to <whyglinux AT gmail DOT com>.'
- # Show variables (for debug use only.)
- show:
- @echo 'PROGRAM :' $(PROGRAM)
- @echo 'SRCDIRS :' $(SRCDIRS)
- @echo 'HEADERS :' $(HEADERS)
- @echo 'SOURCES :' $(SOURCES)
- @echo 'SRC_CXX :' $(SRC_CXX)
- @echo 'OBJS :' $(OBJS)
- @echo 'DEPS :' $(DEPS)
- @echo 'DEPEND :' $(DEPEND)
- @echo 'COMPILE.c :' $(COMPILE.c)
- @echo 'COMPILE.cxx :' $(COMPILE.cxx)
- @echo 'link.c :' $(LINK.c)
- @echo 'link.cxx :' $(LINK.cxx)
- ## End of the Makefile ## Suggestions are welcome ## All rights reserved ##
- ##############################################################
保存一个经常用的Makefile的更多相关文章
- 一步一步写一个简单通用的makefile(一)
经常会用写一些小的程序有的是作为测试,但是每次都需要写一些简单的GCC 命令,有的时候移植一些项目中的部分代码到小程序里面进行测试,这个时候GCC 命令并不好些,如果写啦一个比较常用的makefile ...
- 向大家推荐一个C/C++通用Makefile
在使用 Makefile 之前,只需对它进行一些简单的设置即可:而且一经设置,即使以后对源程序文件有所增减一般也不再需要改动 Makefile.因此,即便是一个没有学习过 Makefile 书写规则的 ...
- 一个简单的通用Makefile实现
一个简单的通用Makefile实现 Makefile是Linux下程序开发的自动化编译工具,一个好的Makefile应该准确的识别编译目标与源文件的依赖关系,并且有着高效的编译效率,即每次重新ma ...
- [置顶]
自己写一个简单通用的Makefile
转自:http://blog.csdn.net/u011913612/article/details/52102241 一.makefile的作用 Makefile是用于自动编译和链接的,一个工程有很 ...
- HTML之:fieldset——一个不常用的HTML标签
2016年4月14日17:10:02记录 一个不常用的HTML标签fieldset,不过我觉得比较有意思,其语法如下: <fieldset><legend>fieldset名称 ...
- 一步一步写一个简单通用的makefile(三)
上一篇一步一步写一个简单通用的makefile(二) 里面的makefile 实现对通用的代码进行编译,这一章我将会对上一次的makefile 进行进一步的优化. 优化后的makefile: #Hel ...
- django保存一个object的时候会发出信号
当django保存一个object的时候会发出一系列的signals,可以通过对这些signals注册listener,从而相应的signal发出时执行一定的代码. from django.core. ...
- 转载:给bash的提示符设置不同的颜色 一个很常用的功能,效果如下:
原文来自:http://www.cnblogs.com/cyttina/archive/2013/01/08/2850406.html 一个很常用的功能,效果如下: 这样就可以很轻易的将输入的指令和其 ...
- 老大写得一个非常高大上的Makefile,包括非常多语法:
一个非常高大上的Makefile,包括非常多语法: TARGET = api-login INSTALL_PATH = /huishoubao/cgi include ../../implements ...
随机推荐
- P1514 引水入城 DFS
题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个NN 行\times M×M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市 ...
- 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
该题还是考杨辉三角计算,只不过最后每一行都放入List集合中,然后返回,直接看代码: public static List<List<Integer>> generate(in ...
- 049 DSL语句
1.说明 2.sql程序 package com.scala.it import org.apache.spark.sql.hive.HiveContext import org.apache.spa ...
- css上传图片中等待不可点击效果
<!DOCTYPE html> <html> <head> <title>上传中</title> <style type=" ...
- Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码)
Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码) 转 https://blog.csdn.net/lhl1124281072/article/details/800 ...
- 笔记-JS高级程序设计-BOM篇
BOM提供了很多对象,用于访问浏览器的功能.这些功能与任何网页无关. 1BOM的核心对象是window,它代表浏览器的一个实例,它是通过JS访问浏览器窗口的一个借口,同时又是ECMAScript规定的 ...
- React-Native + Genymotion android开发环境搭建
1.解压android-sdk_r24.3.4-windows.zip放到一个空间大的开发盘中 2.添加环境变量,路径时 ANDROID_HOME D:\Android\android-sdk-win ...
- antd + node.js + mongoose小总结
最近开发太忙,都没时间更新博客,想通过这篇博客总结一下相关经验,以备后续能用到: 一.antd 1.onChange of undefined问题:可能是页面中表单取了相同的名称,也可能是在遍历时表单 ...
- Intellij IDEA实现SpringBoot项目多端口启动
前言 有时候使用springboot项目时遇到这样一种情况,用一个项目需要复制很多遍进行测试,除了端口号不同以外,没有任何不同.这时我们强大的Intellij IDEA就能替我们实现. 实现方法 第一 ...
- 路由网关---zuul
Zuul:Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架.Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门. 在微服务盛行的时代,客户端与系统之 ...