关于makefile文件研究
makefile文件采用依赖倒推的模式进行编译。
主要由以下几步构成:
1 申明
2 default 默认生成的对象
3 TARGET 链接过程
4 cpp 编译过程
5 生成一个version.h文件
6 一个空force过程
附上一个测试文件
.PHONY: defaultSYSNAME=$(shell uname -s)ifeq ($(SYSNAME),Darwin)ECHO=echoelseECHO=echo -eendifCXX = g++CFLAGS = -pg -Wall -std=c++0xPRO_HOME=~/build-env/build-systemLDFLAGS = -L $(PRO_HOME)/3rd-soft/lib/CLINC = -I $(PRO_HOME)/3rd-soft/include/LDLIBS = -ljsoncpp -lsybdb -lgcrypt -lcurl -luuid -lglog -ljsoncppSOURCES = $(wildcard *.cpp ./common/*.cpp)OBJECTS = $(patsubst %.cpp,%.o,$(SOURCES))TARGET=program_name# TODO: 这里加入所有默认需要编译的目标default: version.h $(TARGET)@echo Generation default ...# 链接过程${TARGET}: $(OBJECTS)@echo Generation TARGET ...$(CXX) $(OBJECTS) $(CLINC) $(LDFLAGS) $(LDLIBS) -o $(TARGET)cp -f $(TARGET) ../bin/$(TARGET)# 编译过程%.o : %.cpp@echo Generation cpp ...$(CXX) -c $(CFLAGS) $(CLINC) $(LDFLAGS) $(LDLIBS) $< -o $@# 下面是每个目标的生成过程TEST_PROGRAM_NAME=ASTEST_PROGRAM_NAME_CN=模块名简介MAIN_VERSION_STRING="1.0.0"VERSION_STRING:=$(shell LANG=C git log --oneline -1 2>/dev/null |cut -c1-7)version.h: force@echo Generation version.h ...@$(ECHO) "# ifndef __TEST_SERVICE_VERSION_H__\n\# define __TEST_SERVICE_VERSION_H__\n\# define SERVICE_VERSION_STRING \"$(MAIN_VERSION_STRING).$(VERSION_STRING)\"\n\# define TEST_PROGRAM_NAME \"$(TEST_PROGRAM_NAME)\"\n\# define TEST_PROGRAM_NAME_CN \"$(TEST_PROGRAM_NAME_CN)\"\n\# endif" > version.hforce:@echo Generation force ...# 程序的生成过程 {{{# }}}
运行以后打印整理如下:
Generation force ...Generation version.h ...Generation cpp ...Generation targets ...Generation default ...
由此可见,实际运行时程序由下往上,按各自的依赖关系,先执行被依赖的部分。
关于makefile文件研究的更多相关文章
- 转:SYNOPSYS VCS Makefile文件编写与研究
SYNOPSYS VCS Makefile文件编写与研究 这个Makefile是synopsys提供的模板,看上去非常好用,你只要按部就班提供实际项目的参数就可以了.我们来看这个文件的头部说明:mak ...
- 编写一个通用的Makefile文件
1.1在这之前,我们需要了解程序的编译过程 a.预处理:检查语法错误,展开宏,包含头文件等 b.编译:*.c-->*.S c.汇编:*.S-->*.o d.链接:.o +库文件=*.exe ...
- Linux工具入门:make工具与Makefile文件
1. make工具 利用make工具可以自动完成编译工作,这些工作包括: 如果修改了某几个源文件,则只重新编译这几个源文件 如果某个头文件被修改了,则重新编译所有包含该头文件的源文件 利用这种自动编译 ...
- Makefile文件学习总结
Makefile文件相当于是一种脚本编程语言,目的是实现自动化编译.编写makefile文件的过程中可以使用变量.控制结构和函数等一般编程语言的特性. Makefile文件的组成内容.makefile ...
- 利用 autoconf 和 automake 生成 Makefile 文件
一.相关概念的介绍 什么是 Makefile?怎么书写 Makefile?竟然有工具可以自动生成 Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚. 1.M ...
- linux下使用automake工具自动生成makefile文件
linux环境下,当项目工程很大的时候,编译的过程很复杂,所以需要使用make工具,自动进行编译安装,但是手写makefile文件比较复杂,所幸在GNU的计划中,设计出了一种叫做Autoconf/Au ...
- Ubuntu ./configure 半途终止 导致没有生成makefile文件 解决方法
在安装thrift的时候,解压包进入目录,执行命令: ./configure 之后,发现某些包没有安装,导致configure到一半的时候退出,接着make发现没有makefile文件.估计是我系统安 ...
- 【OpenWRT】【RT5350】【三】MakeFile文件编写规则和OpenWRT驱动开发步骤
一.Makefile文件编写 http://www.cnblogs.com/majiangjiang/articles/3218002.html 可以看下上面的博客,总结的比较全了,在此不再复述 二. ...
- linux中Makefile文件相关内容
第一章.概述什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional(专业)的程序员,m ...
随机推荐
- 九个问题从入门到熟悉HTTPS
九个问题从入门到熟悉HTTPS Q1: 什么是 HTTPS? LHQ: HTTPS 是安全的 HTTP HTTP 协议中的内容都是明文传输,HTTPS 的目的是将这些内容加密,确保信息传输安全.最后一 ...
- Linux下字符集的安装
目前环境中经常会遇到编码转化的问题,UTF-8跟GB2312也有问题.只得在Linux上安装GB2312(在Linux操作系统上又称zh_CN.GB2312)的字符集,具体请看下文. Linux下几个 ...
- iOS如何把一个CGPoint存入数组里
CGPoint itemSprite1position = ccp(100,200): NSMutableArray * array = [[NSMutableArray alloc] initW ...
- PHP error_reporting() 函数
实例 规定不同的错误级别报告: <?php // 关闭错误报告 error_reporting(0); // 报告 runtime 错误 error_reporting(E_ERROR | E_ ...
- ISO8601时间格式
格式解析 R2/2015-06-04T19:25:16.828696-07:00/P1DT10S 上面的字符串通过"/"分为了三部分即: 重复次数/开始时间/运行间隔 重复次数 R ...
- Spring项目中执行Java脚本
问题:在已搭建好Spring环境的JavaWeb项目中,怎么运行一段Java代码,执行一些类似脚本的功能. 情况一:测试局部功能,不需要依赖Spring框架的. 方法:IDEA中新建一个类,编写主函数 ...
- C语言 · 字符串编辑
算法训练 字符串编辑 时间限制:1.0s 内存限制:512.0MB 问题描述 从键盘输入一个字符串(长度<=40个字符),并以字符 ’.’ 结束.编辑功能有: 1 D:删除一个 ...
- windows C 盘大小异常增大并解决记录
前几天偶然看了一下 C 盘的大小,发现分配的 60 G 最后剩下 8G 可用.十分怀疑. 我先是下载 WizTree 工具进行查看C盘大小,有如下, pagefile.sys 是我修改后变为1G, 前 ...
- [Timer]应用层实现sleep
转自:https://www.cnblogs.com/longbiao831/p/4556246.html Select只能做延时,可以做回调吗? 本文讲述如何使用select实现超级时钟.使用sel ...
- (转)spark日志配置
一.第一部分 1.spark2.1与hadoop2.7.3集成,spark on yarn模式下,需要对hadoop的配置文件yarn-site.xml增加内容,如下: <property> ...