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 ...
随机推荐
- Linux下找不到so文件的解决办法
http://www.cnblogs.com/xudong-bupt/p/3698294.html 如果使用自己手动生成的动态链接库.so文件,但是这个.so文件,没有加入库文件搜索路劲中,程序运行时 ...
- Vue.js使用-组件(上篇)
1.什么是组件 组件可以理解为定义的一个view模块,可重复使用. 2.组件使用 1)创建组件 var myComponent = Vue.extend({ template: ' this is a ...
- 转axios 的应用
尤雨溪之前在微博发布消息,不再继续维护vue-resource,并推荐大家开始使用 axios . 一.axios 简介 axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP ...
- pre 标签的使用注意事项
.news-msg{ // padding: 5px; white-space: pre-wrap; word-wrap: break-word; font-family:'微软雅黑'; } < ...
- 解决问题:swiper动态加载图片后无法滑动
原因:swiper在初始化的时候会扫描swiper-wrapper下面的swiper-slide的个数,从而完成初始化,但是由于动态加载时在初始化之后的动作,所以导致无法滑动. 解决方案 1:在动态获 ...
- CentOS6.5 安装Nexus配置Maven私服
1.下载Nexus的tar包,链接地址.注意,3.x版本需要JDK版本1.8及以上版本. 2.创建安装包存放目录 命令:mkdir -p /usr/local/src/installs 3.rz或者f ...
- Python 执行linux 命令
# !/usr/bin/env python # -*- coding: utf-8 -* import os def main(): file_list = os.popen("ls&qu ...
- DIV+CSS网页设计规范
1.网页HTML代码最前面必须包括W3C声明,以便符合标准: 一般网页: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transition ...
- 确保安全的HTTPS(使用混合加密的HTTPS,前端面试常问)第二篇
苹果已经确定,在iOS9中通信机制采用HTTPS了. 第一篇:http://www.cnblogs.com/ziyi--caolu/p/4742577.html 上一篇详细介绍了为什么要对HTTP进行 ...
- .NET ramework 4.0安装失败
1.停止Window 升级服务: 2.Windows 目录下的 SoftwareDistribution 重命名: 3.安装 .Net Framework 下面是百度上的方法,比较复杂 解决方法:1) ...