Makefile文件应用——complicated项目
学习资料
本文主要参考资料:驾驭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项目的更多相关文章
- Makefile文件应用——huge项目
提高复用性 在build目录下,保存公用部分make.rule (1)绝对路径 用ROOT变量保存项目根目录 (2)增加控制变量 EXE/LIB/ (3)头文件查找目录 gcc 的-I(i的大写)选项 ...
- Makefile文件应用——simple项目
学习资料 本文主要参考资料:驾驭Makefile(李云).pdf 原理 (1)最基本的语法 targets: prerequisites command targets是目标,prerequisite ...
- 简单编写makefile文件,实现GCC4.9编译项目,增加boost库測试等等。。
一.须要用到的hw.cpp hw.h funtest.cpp funtest.h makefile 几个測试文件 1.hw.cpp代码例如以下: #include "hw.h" # ...
- 利用 autoconf 和 automake 生成 Makefile 文件
一.相关概念的介绍 什么是 Makefile?怎么书写 Makefile?竟然有工具可以自动生成 Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚. 1.M ...
- linux下使用automake工具自动生成makefile文件
linux环境下,当项目工程很大的时候,编译的过程很复杂,所以需要使用make工具,自动进行编译安装,但是手写makefile文件比较复杂,所幸在GNU的计划中,设计出了一种叫做Autoconf/Au ...
- makefile文件的技术
[快速的学习笔记] gcc命令:http://www.cnblogs.com/ggjucheng/archive/2011/12/14/2287738.html#_Toc311642845 makef ...
- Linux平台Makefile文件的编写基础篇(转)
目的: 基本掌握了 make 的用法,能在Linux系统上编程.环境: Linux系统,或者有一台Linux服务器,通过终端连接.一句话:有Linux编译环境.准备: ...
- Linux Makefile文件编写详细步骤与实践
Linux Makefile文件编写详细步骤与实践 1.makefile概述 Windows环境下IDE会帮你完成makefile文件的编写,但在UNIX环境下你就必须自己写makefile了,会不会 ...
- Linux学习之Makefile文件的编写
转自:http://goodcandle.cnblogs.com/archive/2006/03/30/278702.html 目的: 基本掌握了 make 的用法,能在Linux系统上编 ...
随机推荐
- Android UI开发第三十九篇——Tab界面实现汇总及比较
Tab布局是iOS的经典布局,Android应用中也有大量应用,前面也写过Android中TAb的实现,<Android UI开发第十八篇——ActivityGroup实现tab功能>.这 ...
- 编写高质量代码--改善python程序的建议(三)
原文发表在我的博客主页,转载请注明出处! 建议十三:警惕eval()的安全漏洞 相信经常处理文本数据的同学对eval()一定是欲罢不能,他的使用非常简单: eval("1+1==2" ...
- iis express worker process已停止工作
以管理员方式运行命令提示符工具,然后执行以下语句 netsh winsock reset 重启电脑
- Python菜鸟之路:Django 文件上传的几种方式
方式一:通过form表单中,html input 标签的“file”完成 # 前端代码uoload.html <form method="post" action=" ...
- mybatis12一级缓存
验证一级缓存的存在 对应的实体类 /** *学生对应的实体类 */ public class Student { private Integer sId; private String sName; ...
- 《深入理解Linux内核》阅读笔记 --- Chapter 2 Memory Addressing
1.logical address = segment identifier (16bits) + offset (32bits) segment selector其实就是GDT或者LDT的索引,其中 ...
- django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)
在python的开发中,遇到了这个错误: django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TA ...
- PHP使用Mongodb
一.安装Mongodb的PHP扩展 wget http://pecl.php.net/get/mongo-1.2.7.tgz //下载扩展包tar zxvf mongo-1.2.7.tgzcd mon ...
- 关于shared pool的深入探讨(六)-高Latch竞争案例
研究了几天shared pool,没想到忽然就撞到问题上来了.作为一个案例写出来给大家参考一下吧. 问题起因是公司做短信群发,就是那个18万买的4000字的短信小说(嘘,小声点,我也没看过...).群 ...
- Phpstorm 换行设置(复制 http://jingyan.baidu.com/article/86fae346b2cb673c49121ad3.html)
很多时候代码太长超出了屏幕的宽度,默认情况下没有自动换行的,我们需要把光标往后挪,才能看到后面代码,显得略为蛋疼,我个人比较喜欢能够自动换行. 下面就说下Phpstorm里如何默认开启自动换行(use ...