# c.cpp混合编译的makefile模板
#
#

BIN = client_system

BASE_INSTALL_DIR := /opt/arm-2009q1

BUILD_TOOL_DIR := $(BASE_INSTALL_DIR)

BUILD_TOOL_PREFIX := $(BUILD_TOOL_DIR)/bin/arm-none-linux-gnueabi-

CC = $(BUILD_TOOL_PREFIX)gcc
CPP = $(BUILD_TOOL_PREFIX)g++

INCS =
LIBS =
SUBDIRS =
#生成依赖信息时的搜索目录,比如到下列目录中搜索一个依赖文件(比如.h文件)
#DEFINC = -I"./../../base/" -I"./../common" -I"./../../lib/lxnet/" -I"./../../lib/tinyxml/src/"
DEFINC = -I"./BasicUsageEnvironment/include" -I"./groupsock/include" -I"./liveMedia/include" \
-I"./UsageEnvironment/include" -I"./myclient"
#给INCS加上依赖搜索路径,分开写可能会产生不一致情况,而且繁琐
#//254434326

#maintest.c tree/rbtree.c 多了子目录,那就直接添加 目录/*.c即可 所有的源文件-- .c文件列表
#CSRCS = $(wildcard ./*.c ./../../base/log.c ./../../base/corsslib.c ./../../base/idmgr.c ./../../base/pool.c)
#CPPSRCS = $(wildcard ./*.cpp ./../common/backcommand.cpp ./../common/connector.cpp)
CSRCS = $(wildcard ./*.c ./BasicUsageEnvironment/*.c ./groupsock/*.c ./liveMedia/*.c \
./UsageEnvironment/*.c ./myclient/*.c)
CPPSRCS = $(wildcard ./*.cpp ./BasicUsageEnvironment/*.cpp ./groupsock/*.cpp ./liveMedia/*.cpp \
./UsageEnvironment/*.cpp ./myclient/*.cpp)

#所有的.o文件列表
COBJS := $(CSRCS:.c=.o)
CPPOBJS := $(CPPSRCS:.cpp=.o)

#生成依赖信息 -MM是只生成自己的头文件信息,-M 包含了标准库头文件信息。
#-MT 或 -MQ都可以改变生成的依赖 xxx.o:src/xxx.h 为 src/xxx.o:src/xxx.h 当然。前面的 src/xxx.o需自己指定
#格式为 -MM 输入.c或.cpp 查找依赖路径 -MT或-MQ 生成规则,比如src/xxx.o
MAKEDEPEND = gcc -MM -MT
CFLAGS = -g3 -O0 -Wall -DBSD=1 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
#CFLAGS += -Wall -ansi -DWIN32 -DNDEBUG -O2
CPPFLAGS = -g3 -O0 -Wall -DBSD=1 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
#CPPFLAGS += -Wall -DWIN32 -DNDEBUG -O2
#-g 生成调试信息
#-pedantic参数与-ansi一起使用 会自动拒绝编译非ANSI程序
#-fomit-frame-pointer 去除函数框架
#-Wmissing-prototypes -Wstrict-prototypes 检查函数原型
#针对每个.c文件的.d依赖文件列表
CDEF = $(CSRCS:.c=.d)
CPPDEF = $(CPPSRCS:.cpp=.d)
PLATS = win32-debug win32-release linux-debug linux-release
none:
@echo "Please choose a platform"
@echo $(PLATS)
win32-debug:
$(MAKE) all INCS=-I"c:/mingw/include" LIBS="-L"c:/mingw/lib" -L"./../../lib/lxnet" -llxnet -lws2_32 -L"./../../lib/tinyxml" -ltinyxml" CFLAGS="-Wall -DWIN32 -DDEBUG -g" CPPFLAGS="-Wall -DWIN32 -DDEBUG -g"
win32-release:
$(MAKE) all INCS=-I"c:/mingw/include" LIBS="-L"c:/mingw/lib" -L"./../../lib/lxnet" -llxnet -lws2_32 -L"./../../lib/tinyxml" -ltinyxml" CFLAGS="-Wall -DWIN32 -DNDEBUG -O2" CPPFLAGS="-Wall -DWIN32 -DNDEBUG -O2"
linux-debug:
$(MAKE) all INCS=-I"/usr/include" LIBS="-L"/usr/lib" -L"./../../lib/lxnet" -llxnet -lpthread -L"./../../lib/tinyxml" -ltinyxml" CFLAGS="-Wall -DDEBUG -g" CPPFLAGS="-Wall -DDEBUG -g"
linux-release:
$(MAKE) all INCS=-I"/usr/include" LIBS="-L"/usr/lib" -L"./../../lib/lxnet" -llxnet -lpthread -L"./../../lib/tinyxml" -ltinyxml" CFLAGS="-Wall -DNDEBUG -O2" CPPFLAGS="-Wall -DNDEBUG -O2"
all:$(BIN)
#生成.o的对自己目录中.h .c的依赖信息.d文件到.c所在的路径中
#$(DEF)文件是.d文件名列表(含目录),比如tree.d 匹配成功那么%就是tree,然后在尝试%.c,如果成功。则执行规则
# $(<:.c=.o)是获取此.c文件的名字(含路径),然后变为.o比如 src/xxx.o。 以形成如下
# src/xxx.o : src/xxx.c ***.h ***.h 最前面!!注意。
# 此做法是每个.d都和生成他的.c在一个目录里,所以需要这样做。
# $(<:.c=.o)之类的 。此时的<相当于变量$< 。切记
# : : : 含义同下
$(CDEF) : %.d : %.c
$(MAKEDEPEND) $(<:.c=.o) $< $(DEFINC) > $@
$(CPPDEF) : %.d : %.cpp
$(MAKEDEPEND) $(<:.cpp=.o) $< $(DEFINC) > $@
#先删除依赖信息
#重新生成依赖信息
#这里出现了一个 $(MAKE) 没有定义的变量。这个变量是由 Make 自己定义的,它的值即为自己的位置,方便 Make 递归调用自己。
depend:
-rm $(CDEF)
-rm $(CPPDEF)
$(MAKE) $(CDEF)
$(MAKE) $(CPPDEF)
#$(OBJS):%.o :%.c 先用$(OBJS)中的一项,比如foo.o: %.o : %.c 含义为:试着用%.o匹配foo.o。如果成功%就等于foo。如果不成功,
# Make就会警告,然后。给foo.o添加依赖文件foo.c(用foo替换了%.c里的%)
# 也可以不要下面的这个生成规则,因为下面的 include $(DEF) 就隐含了。此处为了明了,易懂。故留着
$(COBJS) : %.o: %.c
$(CC) -c $< -o $@ $(INCS) $(DEFINC) $(CFLAGS)
$(CPPOBJS) : %.o: %.cpp
$(CPP) -c $< -o $@ $(INCS) $(DEFINC) $(CPPFLAGS)
# $@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件。每次$< $@ 代表的值就是列表中的
#
$(BIN) : $(COBJS) $(CPPOBJS)
$(CPP) -o $(BIN) $(COBJS) $(CPPOBJS) $(LIBS)
-rm $(COBJS) $(CPPOBJS)
# 链接为最终目标

#引入了.o文件对.c和.h的依赖情况。以后.h被修改也会重新生成,可看看.d文件内容即知道为何
#引入了依赖就相当于引入了一系列的规则,因为依赖内容例如: 目录/xxx.o:目录/xxx.c 目录/xxx.h 也相当于隐含的引入了生成规则
#故上面不能在出现如: $(OBJS) : $(DEF)之类。切记
#include $(CDEF) $(CPPDEF)
.PHONY:clean cleanall
#清除所有目标文件以及生成的最终目标文件
clean:
-rm $(BIN) $(COBJS) $(CPPOBJS)
#rm *.d
cleanall:
-rm $(BIN) $(COBJS) $(CPPOBJS)

http://blog.csdn.net/linking530/article/details/6315172

makefile编写---.c .cpp 混合编译makefile 模板相关推荐

  1. makefile多目录的.c 格式.cpp混合编译

    原文地址:http://blog.csdn.net/yangbingzhou/article/details/50218315 [cpp] view plaincopyprint? # # c.cpp ...

  2. Makefile编写及一个简单的Makefile架构实现

    Makefile编写及一个简单的Makefile架构实现 Makefile常用命令 GCC/G++常用编译参数 简单Makefile框架实现 使用CMake构建项目 Makefile常用命令 make ...

  3. linux内核makefile详解,linux kernel编译Makefile和Kconfig,make menuconfig详解

    Sam需要看看2.6 kernel中USB Mouse的代码.顺便谈谈Kernel中Makefile和Kconfig文件的关系以及配合使用. 背景知识: 背景知识一:Kconfig介绍: 在#make ...

  4. linux环境cpp/c文件的makefile编写(caffe举例)

    编译单个cpp文件 方法一.g++ 文件名.cpp,生成一个名为 "文件名.out" 的可执行文件 方法二.g++ -c 文件名.cpp -o 新文件名.o:生成一个被命名成 &q ...

  5. c语言编译流程简单整理以及简单makefile编写

    c语言编译流程简单整理以及简单makefile编写 前言: 最近接触了makefile.为了学习makefile,就去了解了部分需要的知识,目前先简单的整理在这里. c语言编译过程 C语言在编译过程中 ...

  6. linux下MaKefile编写

    Linux下编写 makefile 详细教程 近期在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是goo ...

  7. 一篇文章看懂makefile编写规则

    该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...

  8. makefile编译_C++ Lesson 5:编译Makefile

    主要内容: 编译程序的过程:preprocessor.compiler.assembler.linker.loader Makefile 类的Makefile 其他方式:.h & .cpp 一 ...

  9. linux 生成和使用动态链接库和静态链接库的Makefile编写

    引用 Jesse Rei 的 linux 生成和使用动态链接库和静态链接库的Makefile编写 生成和使用动态链接库和静态链接库的Makefile编写 1. 概述 介绍linux下生成和使用动态链接 ...

  10. linux 建立伪目标过程,linux之Makefile 编写、规则、伪目标、变量

    什么是Makefile?首先,make是一个工具程序(Utility software),是一种控制编译或者重复编译软件的工具:make可以自动管理软件编译的内容.方式和时机从而使程序员能够把精力集中 ...

最新文章

  1. bat 将war文件转换成ear文件
  2. column 对齐排列命令
  3. SQL Server中事务日志自动增长对性能的影响
  4. ppp lcp协商报文有哪些_PPP协议
  5. MySQL查询语种关键字_SQL——SQL语言全部关键字详解
  6. 虚拟机上使用ghost xp
  7. geant4运行例子_Geant4--一次编译,运行多个Run,极大提升模拟效率
  8. python,无网、没网、生成环境迁移安装环境,支持virtualenv
  9. 亚马逊发力智能音箱商业模式,Alexa正式支持付费第三方应用
  10. LeetCode 113. Path Sum II
  11. SharePoint 2013 SqlException (0x80131904):找不到Windows NT 用户或组xxxx\administrator
  12. 几款笔记软件的使用感受
  13. Angular 个人深究(一)【Angular中的Typescript 装饰器】
  14. 看电视剧《天道》一点感想 + 法兰克福美景Opencv聚类分析
  15. ios添加邮件收件服务器,全球邮企业邮箱在iPhone上使用的设置说明
  16. java基础讲义03
  17. cdatatable大数据操作_C# DataRow和DataColumn:更新数据表
  18. ROS下的罗技F710通信
  19. 金仓数据库KingbaseES V8R3集群删除test库主备切换测试案例
  20. 2019年8月份编程语言排行榜

热门文章

  1. 业界常用的技术评估指标和方法,
  2. HBASE自带小工具,统计表的行数
  3. python中关于图例legend在图外的画法简析
  4. 【2017 United Kingdom and Ireland Programming Contest (UKIEPC 2017)】Knightsbridge Rises【最大流+路径输出】
  5. 基础集合论 第一章 7 交集 8 差集
  6. 242.有效的字母异位词(力扣leetcode) 博主可答疑该问题
  7. ajax验证作用,通过正则表达式使用ajax检验注册信息功能
  8. android分享文字到朋友圈,微信,分享朋友圈,只能分享图,文字带不过来,这是什么原因?是BUG吗?...
  9. 简单的springBoot集成jedis
  10. Oracle ORA-00119和ORA-00132的解决方案