热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Makefile中如何使用.d文件?

在自动生成依赖关系是要使用.d文件请问怎么使用该文件-include$(DEPS)#DEPS是指定的.d文件的变量当Makefile包含了.d文件之后什么也没做呀,.d文件是怎么起作用的?如
在自动生成依赖关系是要使用.d文件请问怎么使用该文件
-include $(DEPS)
#DEPS是指定的.d文件的变量
当Makefile包含了.d文件之后什么也没做呀,.d文件是怎么起作用的?
如下有一个Makefile
     
    EXECUTABLE := mushroom.exe 
    LIBS := alleg  
     
    CFLAGS := -g -Wall -O3 -m486 
    CXXFLAGS := $(CFLAGS) 
    
    RM-F = rm -f 
     
    SOURCE := $(wildcard *.c) $(wildcard *.cc)  
    OBJS := $(patsubst %.c,%.o,$(patsubst %.cc,%.o,$(SOURCE))) 
    DEPS := $(patsubst %.o,%.d,$(OBJS))  
    MISSING_DEPS := $(filter-out $(wildcard $(DEPS)),$(DEPS))  
    MISSING_DEPS_SOURCES := $(wildcard $(patsubst %.d,%.c,$(MISSING_DEPS)) \ 
    $(patsubst %.d,%.cc,$(MISSING_DEPS))) 
    CPPFLAGS += -MD 
    .PHONY : everything deps objs clean veryclean rebuild 
     
    everything : $(EXECUTABLE) 
     
    deps : $(DEPS) 
     
    objs : $(OBJS) 
     
    clean : 
     @$(RM-F) *.o 
     @$(RM-F) *.d 
     
    veryclean: clean 
     @$(RM-F) $(EXECUTABLE) 
     
    rebuild: veryclean everything 
     
    ifneq ($(MISSING_DEPS),) 
    $(MISSING_DEPS) :  
       @$(RM-F) $(patsubst %.d,%.o,$@) 
    endif 
     
    -include $(DEPS) 
     
    $(EXECUTABLE) : $(OBJS) 
     gcc -o $(EXECUTABLE) $(OBJS) $(addprefix -l,$(LIBS))

###########################################
    deps : $(DEPS) 
     
    objs : $(OBJS)
这两句没有任何命令,是不是使用了隐含规则?
    -include $(DEPS)
只是把.d文件包含进来,这样它就能起作用吗?
还有如果我想不生成的.o .d文件放到别的文件夹里或者原文件不在当前目录下那上面两句还能好用吗?

9 个解决方案

#1


.d文件里包含了目标文件的所有依赖.
比如: test.c 里包含a.h a1.h a2.h a3.h a4.h 头文件.这些都是目标文件test.o的依赖文件.\
bash-2.05a$ cat test.c
#include 
#include 

#include "a.h"
#include "a1.h"
#include "a2.h"
#include "a3.h"
#include "a4.h"
bash-2.05a$ gcc -MM test.c
test.o: test.c a.h a1.h a2.h a3.h a4.h ==>自动生成依赖文件,不需要手动指定.-MM的时候不显示系统头文件.

#2


自动生成的依赖文件不用包含在makefile中?
     至少我从来没有依赖过.h文件
   
     lz的代码最好弄清楚点。

#3


谢谢楼上的两位
我知道.d文件是包含文件的依赖关系
我是不知道.d文件在Makefile文件中的作用,和它是怎样起作用的?

#4


建议楼主去看一下<<跟我一起写Makefile>>

#5


-include $(DEPS) 将会把*.d文件里内容插入到Makefile里.
这样的话Makefile就变成这样了:

... ...
test.o: test.c a.h a1.h a2.h a3.h a4.h
xxx.o: xxx.c xxx.h
... ...
这样就可以生成目标文件了。然而$(BIN)需要这些目标文件。

#6


>>>>>我是不知道.d文件在Makefile文件中的作用,和它是怎样起作用的?
.d 可以是一个临时文件,保存了依赖关系.这些以来关系还是要加到Makefile文件里的.在
使用include将.d文件里内容加到Makefile文件里.

#7


我还有问题
-include $(DEPS) 将会把*.d文件里内容插入到Makefile里.
这样的话Makefile就变成这样了:

... ...
test.o: test.c a.h a1.h a2.h a3.h a4.h
xxx.o: xxx.c xxx.h
... ...
这样就可以生成目标文件了。然而$(BIN)需要这些目标文件
那么make 是不是根据.d中的内容如
test.o: test.c a.h a1.h a2.h a3.h a4.h
在根据隐含规则生成.o文件?
那么我们在Makefile中是不是不需要再写诸如%.o : %.c 等这样的语句了?

#8


不需要.
加入-include $(DEPS)根据隐含规则生成目标文件.
你的makefile是一个通用的makefile.

#9


我有点不明白,既然Makefile文件可以将.d的文件包含进来,为什么还要在源程序包含呢

推荐阅读
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • 本文总结了在开发中使用gulp时的一些技巧,包括如何使用gulp.dest自动创建目录、如何使用gulp.src复制具名路径的文件以及保留文件夹路径的方法等。同时介绍了使用base选项和通配符来保留文件夹路径的技巧,并提到了解决带文件夹的复制问题的方法,即使用gulp-flatten插件。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 本文记录了作者对x265开源代码的实现与框架进行学习与探索的过程,包括x265的下载地址与参考资料,以及在Win7 32 bit PC、VS2010平台上的安装与配置步骤。 ... [详细]
author-avatar
baby欧米茄
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有