• 学习资料

本文主要参考资料:驾驭Makefile(李云).pdf

  • Complicated项目

需求:

(1)object文件放到objs目录下

(2)可执行文件放到exes目录下

(3)增加头文件依赖

  • 自动生成依赖关系

(1)先用编译器为每一个源文件的自动生成的依赖关系放到一个文件(***.dep)中

gcc的-M和-MM选项

gcc -M foo.c //-M选项会列出对系统头文件的依赖关系

gcc -MM foo.c //-MM选项不会列出对系统头文件的依赖关系

(2)写出 .c 文件和 .dep 文件的依赖关系,并让make自动更新或生成 .dep 文件

foo.dep: foo.c //foo.d依赖foo.c生成
gcc -MM foo.c

最终生成的依赖关系:foo.o: foo.c foo.h,存放在foo.d文件中

(3)对编译器生成的依赖关系文件,进行加工处理

sed 's,\($*\)\.o[ :]*,objs/\1.o $@ : ,g' < $@.$$$$ >; $@; \

这个语句实现将foo.o: foo.c foo.h,更改为objs/foo.o deps/foo.dep: foo.c foo.h

增加了存放目录,以及把deps/foo.dep加入让依赖关系文件也能动态更新。

(4)实现代码

$(DIR_DEPS)/%.dep: $(DIR_DEPS) %.c
@echo "Making $@ ..."
@set -e;
$(RM) $(RMFLAGS) $@.tmp;
$(CC) -E -MM $(filter %.c, $^) > $@.tmp; \
sed 's,\($*\)\.o[ :]*,objs/\1.o $@ : ,g' < $@.tmp >; $@; \
$(RM) $(RMFLAGS) $@.tmp;

(5)include相关依赖关系文件

注:有原文章,这里有死循环问题,具体参考:https://blog.csdn.net/mantis_1984/article/details/72598848

其余目录依赖也有相关问题,可用同样方法解决。

  • 条件语法

ifdef variable-name
ifndef variable-name

有没有定义过某个变量

ifeq (arg1, arg2)
ifeq 'arg1' 'arg2'
ifeq "arg1" "arg2"
ifeq 'arg1' "arg2"
ifeq "arg1" 'arg2'

是否相等或不等

Makefile文件应用——complicated项目的更多相关文章

  1. Makefile文件应用——huge项目

    提高复用性 在build目录下,保存公用部分make.rule (1)绝对路径 用ROOT变量保存项目根目录 (2)增加控制变量 EXE/LIB/ (3)头文件查找目录 gcc 的-I(i的大写)选项 ...

  2. Makefile文件应用——simple项目

    学习资料 本文主要参考资料:驾驭Makefile(李云).pdf 原理 (1)最基本的语法 targets: prerequisites command targets是目标,prerequisite ...

  3. 简单编写makefile文件,实现GCC4.9编译项目,增加boost库測试等等。。

    一.须要用到的hw.cpp hw.h funtest.cpp funtest.h makefile 几个測试文件 1.hw.cpp代码例如以下: #include "hw.h" # ...

  4. 利用 autoconf 和 automake 生成 Makefile 文件

    一.相关概念的介绍 什么是 Makefile?怎么书写 Makefile?竟然有工具可以自动生成 Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚. 1.M ...

  5. linux下使用automake工具自动生成makefile文件

    linux环境下,当项目工程很大的时候,编译的过程很复杂,所以需要使用make工具,自动进行编译安装,但是手写makefile文件比较复杂,所幸在GNU的计划中,设计出了一种叫做Autoconf/Au ...

  6. makefile文件的技术

    [快速的学习笔记] gcc命令:http://www.cnblogs.com/ggjucheng/archive/2011/12/14/2287738.html#_Toc311642845 makef ...

  7. Linux平台Makefile文件的编写基础篇(转)

    目的:       基本掌握了 make 的用法,能在Linux系统上编程.环境:       Linux系统,或者有一台Linux服务器,通过终端连接.一句话:有Linux编译环境.准备:      ...

  8. Linux Makefile文件编写详细步骤与实践

    Linux Makefile文件编写详细步骤与实践 1.makefile概述 Windows环境下IDE会帮你完成makefile文件的编写,但在UNIX环境下你就必须自己写makefile了,会不会 ...

  9. Linux学习之Makefile文件的编写

    转自:http://goodcandle.cnblogs.com/archive/2006/03/30/278702.html 目的:       基本掌握了 make 的用法,能在Linux系统上编 ...

随机推荐

  1. Pert图简介

    活动图,即工程网络技术,又称PERT(Project Evaluation and Review Technique,PERT)技术. 参考地址: http://www.cnblogs.com/jiq ...

  2. leveldb学习笔记

    LevelDB由 Jeff Dean和Sanjay Ghemawat开发. LevelDb是能够处理十亿级别规模Key-Value型数据持久性存储的C++ 程序库. 特别如下: 1.LevelDb是一 ...

  3. NATS源代码之logger目录

    nats的logger目录文件如下 log.go syslog.go syslog_windows.go 基于golang语言的logger包实现日志功能. Golang的log包短小精悍,可以非常轻 ...

  4. Dart基础学习03--方法的使用

    1.本文主要讲一下Dart中的方法是怎么定义的,下面先看一个简单的例子: void printNumber(num number) { print('The number is $number.'); ...

  5. 手动爬虫之报头及代理封装类(python3)

    本人刚刚学习爬虫,见每次都需要添加报头比较繁琐,故将该过程封装为Url_ProxyHelper类,代码如下 import urllib.request as ur class Url_ProxyHel ...

  6. 5.MongoDB CRUD Operations-官方文档摘录

    总结 1. CRUD:create, read, update, and delete DOCUMENT 2.在3.2版本的插入方式 db.collection.insertOne() db.coll ...

  7. Web Service简单demo

    最近开发因需求要求需要提供Web Service接口供外部调用,由于之前没有研究过该技术,故查阅资料研究了一番,所以写下来记录一下,方便后续使用. 这个demo采用CXF框架进行开发,后续所提到的We ...

  8. Read Large Files in Python

    I have a large file ( ~4G) to process in Python. I wonder whether it is OK to "read" such ...

  9. Python之字符编码(Day10)

    1. python解释器执行py文件的原理 ,例如python test.py    第一阶段:python解释器启动,此时就相当于启动了一个文本编辑器 第二阶段:python解释器相当于文本编辑器, ...

  10. 转:oralce常用操作、查询语句(查看表空间)

    http://highill.iteye.com/blog/1534858 最近整理一下oralce的常用语句,借此记录一下,在网上都应该能搜到,这里主要是整理分享. 一.操作语句 建立表空间 MYD ...