c++ 的makefile文件实例
首先声明, 感谢九哥的帮助,因为从来没写过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文件实例的更多相关文章
- Makefile文件学习总结
Makefile文件相当于是一种脚本编程语言,目的是实现自动化编译.编写makefile文件的过程中可以使用变量.控制结构和函数等一般编程语言的特性. Makefile文件的组成内容.makefile ...
- [转]makefile文件的编写规则及实例
http://xueqi.iteye.com/blog/1567866 1.一个简单的makefile例子 假设一个程序有两个文件file1.c,file2.c,每个文件都包含head.h,生 ...
- 使用automake等命令自动生成Makefile文件 (转载)
使用automake等命令自动生成Makefile文件 Linux下编程时,为了方便编译,往往使用Makefile文件自动完成编译,但是Makefile文件本身的书写十分复杂,规则很多.好在Lin ...
- Linux内核Makefile文件(翻译自内核手册)
--译自Linux3.9.5 Kernel Makefiles(内核目录documention/kbuild/makefiles.txt) kbuild(kernel build) 内核编译器 Thi ...
- makefile基础实例讲解 分类: C/C++ 2015-03-16 10:11 66人阅读 评论(0) 收藏
一.makefile简介 定义:makefile定义了软件开发过程中,项目工程编译链.接接的方法和规则. 产生:由IDE自动生成或者开发者手动书写. 作用:Unix(MAC OS.Solars)和Li ...
- 教会你如何编写makefile文件
最近一直在学习makefile是如何编写的.当我们写的程序文件比较少的时候,敲入gcc /g++,当你在大型工程中,在一个个编译文件的话,你可能就会很郁闷.linux有一个自带的make命令,它让你的 ...
- 怎样写Makefile文件(C语言部分)
本文摘抄自"跟我一起写Makefile ",只是原文中我自己感觉比较精要的一部分,并且只针对C语言,使用GCC编译器. 原文请看这里:http://wiki.ubuntu.org. ...
- 工程管理之makefile与自动创建makefile文件过程
(风雪之隅 http://www.laruence.com/2009/11/18/1154.html) Linux Makefile自动编译和链接使用的环境 想知道到Linux Makefile系统的 ...
- 如何编写makefile文件
最近一直在学习makefile是如何编写的. 当我们写的程序文件比较少的时候,敲入gcc /g++,当你在大型工程中,在一个个编译文件的话,你可能就会很郁闷.linux有一个自带的make ...
随机推荐
- Boost家族
大师Yoav Freund在文章<A decision-theoretic generalization of on-line leanring and an application to bo ...
- regularization
https://www.zhihu.com/question/20924039 http://52opencourse.com/133/coursera%E5%85%AC%E5%BC%80%E8%AF ...
- HTTPS演变小图
HTTP就是我们平时浏览网页时候使用的一种协议.HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全.为了保证这些隐私数据能加密传输,网景公司设计了SSL(Se ...
- (原创)c++11改进我们的模式之改进单例模式
我会写关于c++11的一个系列的文章,会讲到如何使用c++11改进我们的程序,本次讲如何改进我们的模式,会讲到如何改进单例模式.观察者模式.访问者模式.工厂模式.命令模式等模式.通过c++11的改进, ...
- 【Linux技术】Windows与Linux系统下的库·初探
库的定义 库文件是一些预先编译好的函数的集合,那些函数都是按照可再使用的原则编写的.它们通常由一组互相关联的用来完成某项常见工作的函数构成,从本质上来说库是一种可执行代码的二进制形式,可以被操作系统 ...
- electron 创建右键菜单
1.引入模块 const Electron = require('electron'); const remote = Electron.remote; const Menu = remote.Men ...
- listen的参数backlog的意义
实验环境:Ubuntu16.04,内核版本:4.4.0-59-generic 根据man listen得到的解释如下: backlog参数定义了存放pending状态(挂起.护着搁置)的连接的 ...
- AIX上打包排除某些文件/文件夹
Syntax X/Open Standards: tar {-c|-r|-t|-u|-x} [-B] [ -d ] [ -E ] [ -F ] [-h ] [ -i ] [ -l ] [ -m ] [ ...
- 1. K近邻算法(KNN)
1. K近邻算法(KNN) 2. KNN和KdTree算法实现 1. 前言 K近邻法(k-nearest neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用, ...
- 基于jQuery和CSS3超酷Material Design风格滑动菜单导航特效
分享一款效果非常炫酷的谷歌 Material Design 风格jQuery和CSS3滑动选项卡特效.该选项卡特效集合了扁平风格设计和按钮点击波特效.是一款设计的非常不错的Material Desig ...