首先声明, 感谢九哥的帮助,因为从来没写过makefile, 所以一直是手动编译,

然后有一次写了三个文件, 需要编译, 而我只编译了一个文件, 所以一直出错, 九哥告诉我用makefile更方便, 可以学习一下

于是我就写了看了很多的blog, 然后向九哥要了这么个东西, 据说还有可以生成的工具

###########################################
#Makefile for simple programs
###########################################
#INC 是你项目包含的目录
INC=
#LIB是你需要链接的库
LIB= -lpthread
#CC是一个变量名 可以随便起,这里代表你的编译器
CC=g++
#LINK是链接的程序
LINK=g++
#LDFLAGS是链接的选项
LDFLAGS=
#CC_FLAG 是编译选项
CC_FLAG=-Wall -m64 # PRG=操作符重载, 这里是目录名字
PRG=aa
# 这里是空格隔开, 不能是逗号,需要注意
# root@corleone:/opt/code/testC++/aa# ls
# makefile mytime0.cpp mytime.h usertime0.cpp
# 上面这是目录下的文件, 那需要写几个.o的文件呢? 就这么写
OBJ=mytime0.o usertime0.o #当你make 后 编译器会去找 $(XXXX):$(xxxx) 的那一行
#你会发现它下面是一个 table缩进, table缩进 表示要执行那个命令
#然后编译器会查看 "-o $@" 后面的目标有没有生成或者更新,没有就重新编译那个目标文件
#比如这里$(OBJ)是各种.o文件, 那么就会先编译这些.o文件 会去执行.cpp.o:下面的缩进命令 $(PRG):$(OBJ)
$(CC) $(INC) $(LIB) -o $@ $(OBJ) #.SUFFIXES表示后缀名
#这里表示要把INC下面的所有后缀是cpp或者c的编译成.o文件
.SUFFIXES: .c .o .cpp
.cpp.o:
$(CC) $(CC_FLAG) $(INC) -c $*.cpp -o $*.o .PRONY:clean
clean:
@echo "Removing linked and compiled files......"
rm -f $(OBJ) $(PRG)
###########################################
#Makefile for simple programs
###########################################
#INC 是你项目包含的目录
INC=
#LIB是你需要链接的库
LIB= -lpthread
#CC是一个变量名 可以随便起,这里代表你的编译器
CC=g++
#LINK是链接的程序
LINK=g++
#LDFLAGS是链接的选项
LDFLAGS=
#CC_FLAG 是编译选项
CC_FLAG=-Wall -m64 PRG=threadpooltest
OBJ=CThreadManage.o CThreadPool.o CThread.o CWorkerThread.o threadpooltest.o #当你make 后 编译器会去找 $(XXXX):$(xxxx) 的那一行
#你会发现它下面是一个 table缩进, table缩进 表示要执行那个命令
#然后编译器会查看 "-o $@" 后面的目标有没有生成或者更新,没有就重新编译那个目标文件
#比如这里$(OBJ)是各种.o文件, 那么就会先编译这些.o文件 会去执行.cpp.o:下面的缩进命令 $(PRG):$(OBJ)
$(CC) $(INC) $(LIB) -o $@ $(OBJ) #.SUFFIXES表示后缀名
#这里表示要把INC下面的所有后缀是cpp或者c的编译成.o文件
.SUFFIXES: .c .o .cpp
.cpp.o:
$(CC) $(CC_FLAG) $(INC) -c $*.cpp -o $*.o .PRONY:clean
clean:
@echo "Removing linked and compiled files......"
rm -f $(OBJ) $(PRG) ###########################################
#这里举个复杂的例子
########################################### # 先找到$(XXXX):$(xxxx)
# 去找"-o $@" 后面的目标有没有生成或者更新,有就重新编译那个目标
# "-o $@" 后面所有的目标都好了就开始链接主程序了
# 编译和链接都需要一些选项
# >> output表示输出重定向到文件,这样出错了比较好查找
all_objs= xxx1.o ../xxx2.o ../../xxx3.o
#all_libs是链接的库, -L指定库的目录, -l指定库的名字
all_libs=-L../../sourceapp/qmarket/xykjclient/ -lMarketApi -lACE
#$(target): $(all_objs)
# $(LINK) $(LDFLAGS) -o $@ $(all_objs) $(all_libs) $(LIB) >> output #你可以自己加一些选项 比如下面的test 你在命令行 执行 make test,他就会执行那个缩进的命令
test:
@echo "this is test"

c++ 的makefile文件实例的更多相关文章

  1. Makefile文件学习总结

    Makefile文件相当于是一种脚本编程语言,目的是实现自动化编译.编写makefile文件的过程中可以使用变量.控制结构和函数等一般编程语言的特性. Makefile文件的组成内容.makefile ...

  2. [转]makefile文件的编写规则及实例

    http://xueqi.iteye.com/blog/1567866   1.一个简单的makefile例子   假设一个程序有两个文件file1.c,file2.c,每个文件都包含head.h,生 ...

  3. 使用automake等命令自动生成Makefile文件 (转载)

    使用automake等命令自动生成Makefile文件   Linux下编程时,为了方便编译,往往使用Makefile文件自动完成编译,但是Makefile文件本身的书写十分复杂,规则很多.好在Lin ...

  4. Linux内核Makefile文件(翻译自内核手册)

    --译自Linux3.9.5 Kernel Makefiles(内核目录documention/kbuild/makefiles.txt) kbuild(kernel build) 内核编译器 Thi ...

  5. makefile基础实例讲解 分类: C/C++ 2015-03-16 10:11 66人阅读 评论(0) 收藏

    一.makefile简介 定义:makefile定义了软件开发过程中,项目工程编译链.接接的方法和规则. 产生:由IDE自动生成或者开发者手动书写. 作用:Unix(MAC OS.Solars)和Li ...

  6. 教会你如何编写makefile文件

    最近一直在学习makefile是如何编写的.当我们写的程序文件比较少的时候,敲入gcc /g++,当你在大型工程中,在一个个编译文件的话,你可能就会很郁闷.linux有一个自带的make命令,它让你的 ...

  7. 怎样写Makefile文件(C语言部分)

    本文摘抄自"跟我一起写Makefile ",只是原文中我自己感觉比较精要的一部分,并且只针对C语言,使用GCC编译器. 原文请看这里:http://wiki.ubuntu.org. ...

  8. 工程管理之makefile与自动创建makefile文件过程

    (风雪之隅 http://www.laruence.com/2009/11/18/1154.html) Linux Makefile自动编译和链接使用的环境 想知道到Linux Makefile系统的 ...

  9. 如何编写makefile文件

    最近一直在学习makefile是如何编写的.       当我们写的程序文件比较少的时候,敲入gcc /g++,当你在大型工程中,在一个个编译文件的话,你可能就会很郁闷.linux有一个自带的make ...

随机推荐

  1. mongodb导出数据表命令之mongoexport

    mongoexport导出文件格式支持csv和json,不同的是csv格式必须显示的指定要导出的字段,如: mongoexport -d rbac -c rbacs -o d:/web/rbac.cs ...

  2. distill 来自google,openai,deepmind,YC research

    https://distill.pub/ https://colah.github.io/

  3. 每日英语:KFC's Crisis in China Tests Ingenuity of Man Who Built Brand

    Sam Su for years ran one of the highest-flying foreign business operations in China. These days, he' ...

  4. Unity3d中默认函数调用顺序(MonoBehaviour)

    首先要明确的是MonoBehaviour是每个脚本的基类.每个Javascript脚本自动继承MonoBehaviour.使用C#或Boo时,需要显式继承MonoBehaviour.         ...

  5. jquery改变元素上下排列的顺序

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. idea 换主题

    换背景 . 选中行变色

  7. C#学习笔记(26)——委托计算器

    说明(2017-11-20 15:14:18): 1. 委托一直稀里糊涂的,有人说简单,有人说难,艹你们! 2. 其实主要是因为,平时不用委托也能解决大部分问题,所以都没有特意去用,网上也没有什么很好 ...

  8. RPC框架与分布式服务框架的区别

    第一:RPC框架是点对点的通信方式,即服务消费者与服务提供者是点对点通信 第二:分布式服务框架,不近具有RPC框架的特性,同时,还包括以下特性: 1.提供多台服务器提供服务,具有负载均衡策略 2.服务 ...

  9. redis的setbit命令

    redis的setbit这个bit怎么理解,配合bitcount使用? 这个是SETBIT使用方法的简单说明&lt;img src="https://pic4.zhimg.com/8 ...

  10. azkaban安装

    1.下载:git clone https://github.com/azkaban/azkaban.git 2.编译:./gradlew build -x test 3. 创建目录并拷贝 mkdir ...