查看C语言文件依赖关系(用-Wp,MD参数生成.d文件)

2023-11-05

1、-wp,-MD参数介绍

(1)在编译c源文件时使用该参数,会生成对应C源文件的.d格式的文件,.d格式的文件内容是C源文件的依赖关系;
(2)C源文件的依赖关系就是源文件调用了哪些头文件,可以方便我们确认工程中的同名头文件到底是引用的哪一份;
(3)在大型项目中(比如内核),有很多同名头文件,可能放在了不同平台、不同产品类型的目录下,本次编译到底引用的哪个路径下的头文件,并不能很直观的看出来,这时候就可以通过-wp,-MD参数生成.d文件来看文件依赖关系;

2、Makefile中使用示例

dep_file = .$@.d

#Makefe的规则
%.o : %.c
	$(CC) $(CFLAGS) -Wp,-MD,$(dep_file) -c -o $@ $<

(1)将.c文件编译成.o文件,并且将.c文件的依赖关系写到$(dep_file)文件中;
(2)上面Makefile的规则达到的效果:比如编译main.c文件,会生成main.o文件和.main.o文件;
注意:.main.d文件是隐藏文件,需要ls -a才能看到;

3、示例代码

3.1、main.c

#include <stdio.h>
#include <string.h>

//我自己写的头文件

#include "config.h"
#include "fb.h"
#include "bmp.h"
#include "decode_jpg.h"
#include "decode_png.h"
#include "imageManager.h"
#include "touchScreen.h"

int main(int argc, char *argv[])
{
	······
}

3.2、.main.d文件

main.o: main.c \
	
 //编译链提供的头文件

 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/stdc-predef.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/stdio.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/bits/libc-header-start.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/features.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/sys/cdefs.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/bits/wordsize.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/bits/long-double.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/gnu/stubs.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/gnu/stubs-soft.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/lib/gcc/arm-linux-gnueabi/6.3.0/include/stddef.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/bits/types.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/bits/typesizes.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/libio.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/_G_config.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/wchar.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/lib/gcc/arm-linux-gnueabi/6.3.0/include/stdarg.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/bits/stdio_lim.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/bits/sys_errlist.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/bits/stdio.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/string.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/xlocale.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/bits/string.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/bits/string2.h \
 /opt/hisi-linux/x86-arm/arm-himix200v002-linux/target/usr/include/stdlib.h \
 
 //我自己写的头文件的路径
 
 /home/aston/study_myself/picturePlayer/myPlayer/build/../include/common/config.h \
 /home/aston/study_myself/picturePlayer/myPlayer/build/../include/fb/fb.h \
 /home/aston/study_myself/picturePlayer/myPlayer/build/../include/decode/bmp/bmp.h \
 /home/aston/study_myself/picturePlayer/myPlayer/build/../include/decode/jpg/decode_jpg.h \
 /home/aston/study_myself/picturePlayer/myPlayer/build/../include/decode/png/decode_png.h \
 /home/aston/study_myself/picturePlayer/myPlayer/build/../include/imageManager/imageManager.h \
 /home/aston/study_myself/picturePlayer/myPlayer/build/../include/touchScreen/touchScreen.h

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查看C语言文件依赖关系(用-Wp,MD参数生成.d文件) 的相关文章

  • 任何退出 bash 脚本但不退出终端的方法

    当我使用exitshell 脚本中的命令 该脚本将终止终端 提示符 有什么方法可以终止脚本然后停留在终端中吗 我的剧本run sh预计通过直接获取或从另一个脚本获取来执行 编辑 更具体地说 有两个脚本run2 sh as run sh ec
  • 如何在C(Linux utf8终端)中打印“盒子抽屉”Unicode字符?

    我正在尝试显示 方框图范围 2500 257F 中的 Unicode 字符 它应该是标准 utf8 Unicode 标准 版本 6 2 我根本做不到 我首先尝试使用旧的 ASCII 字符 但 Linux 终端以 utf8 显示 并且没有显示
  • 使用 systemctl 获取 systemd 进程的正常运行时间或停机时间?

    喜欢使用systemctl is active
  • bash 将输出重定向到文件,但结果不完整

    重定向命令输出的问题已经被问过很多次了 但是我有一个奇怪的行为 我使用的是 bash shell debian 版本 4 3 30 1 release 并尝试将输出重定向到文件 但并非所有内容都记录在文件中 我尝试运行的 bin 文件是 l
  • 更新Linux中的包含路径

    我的 my path to file 文件夹中有几个头文件 我知道如何将这些文件包含在新的 C 程序中 但每次我都需要在包含它之前输入头文件的完整路径 我可以在linux中设置一些路径变量 以便它自动查找头文件吗 您可以创建一个 makef
  • 如何从 Bash 命令行在后台 Vim 打开另一个文件?

    我正在从使用 Gvim 过渡到使用控制台 Vim 我在 Vim 中打开一个文件 然后暂停 Vim 在命令行上运行一些命令 然后想返回到 Vim Ctrl Z 在正常模式下 暂停 Vim 并返回到控制台 fg可用于将焦点返回到 Vim job
  • Bash:将字符串添加到文件末尾而不换行

    如何将字符串添加到文件末尾而不换行 例如 如果我使用 gt gt 它将添加到文件末尾并换行 cat list txt yourText1 root host 37 echo yourText2 gt gt list txt root hos
  • “git add”返回“致命:外部存储库”错误

    我刚刚进入 git 的奇妙世界 我必须提交我对程序所做的一系列更改 位于名为的目录中 var www myapp 我创建了一个新目录 home mylogin gitclone 从这个目录中 我做了一个git clone针对公共回购 我能够
  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • 生成带有完整路径的 gcc 依赖项

    我有一个简单的项目 看起来像这样 build file1 o one file1 o file2 o depend Makefile src file1 cpp one file1 cpp file2 cpp Makefile 是这样的 G
  • Linux无法删除文件

    当我找到文件时 我在删除它们时遇到问题 任务 必须找到带有空格的文件并将其删除 我的尝试 rm find L root grep i 但我有错误 rm cannot remove root test No such file or dire
  • Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令的输出?

    我试图将命令的输出分配给变量 而不让命令认为它正在通过管道传输 原因是 如果正在通过管道传输 则相关命令会给出未格式化的文本作为输出 但如果从终端运行 则会给出颜色格式化的文本 我需要获取这种颜色格式的文本 到目前为止我已经尝试了一些事情
  • awk 在循环中使用时不打印任何内容[重复]

    这个问题在这里已经有答案了 我有一堆使用 file 1 a 1 txt 格式的文件 如下所示 A 1 B 2 C 3 D 4 并使用以下命令添加包含每个文件名称的新列 awk print FILENAME NF t 0 file 1 a 1
  • Tomcat Intellij Idea:远程部署

    RackSpace 云服务器 Ubuntu 12 04 Intellij Idea 11 1 2 Windows 8 Tomcat 7 0 26 JDK 6 在 Intellij Idea 上 当我尝试在远程 Tomcat 7 服务器上运行
  • 仅使用containerd(不使用Docker)修剪容器镜像

    如果我刚刚containerd安装在 Linux 系统上 即 Docker 是not安装 如何删除未使用的容器映像以节省磁盘空间 Docker 就是这么方便docker system prune https docs docker com
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • ALSA:snd_pcm_writei 调用时缓冲区不足

    当运行我最近从灰烬中带回来的旧程序时 我遇到了缓冲区不足的情况 该程序将原始声音文件完全加载到内存中 2100 字节长 525 帧 并准备 ALSA 进行输出 44 1khz 2 通道 有符号 16 位 if err snd pcm set
  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我们真的应该使用 Chef 来管理 sudoers 文件吗?

    这是我的问题 我担心如果 Chef 破坏了 sudoers 文件中的某些内容 可能是 Chef 用户错误地使用了说明书 那么服务器将完全无法访问 我讨厌我们完全失去客户的生产服务器 因为我们弄乱了 sudoers 文件并且无法再通过 ssh
  • 通过 Visual Studio 2017 使用远程调试时 Linux 控制台输出在哪里?

    我的Visual Studio 2017 VS2017 成功连接Linux系统 代码如下 include

随机推荐

  • Ubuntu18.04+CUDA10.2 深度学习开发环境配置指南

    深度学习 Author louwill Machine Learning Lab 搞深度学习环境永远是第一步 显卡与服务器等硬件设备装机完成后就需要配置本机环境 本篇配置主要包括Nvidia驱动安装 CUDA安装和深度学习与Python环境
  • profibus 主站软件_S7-1500作为DP从站连接到第三方DP主站的方法

    要将S7 1500自动化系统作为PROFIBUS DP从站接入到第三方自动化系统的DP主站系统中 必须使用CM 1542 5或CP 1542 5并设置PROFIBUS 相关参数 才能实现S7 1500与第三方自动化系统的数据交换 本文通过一
  • 解决QT Creator交叉编译提示make:arm-linux-g++:Command not found 命令找不到

    解决QT Creator交叉编译提示make arm linux g Command not found 命令找不到 初学QT 用QT Creator写了一个小程序 使用ubuntu 11 编译工具使用arm none linux gnue
  • Vue实现多文件上传

    一 需求说明及展示 通过vue和element实现多文件上传 二 实现步骤 代码片
  • 最基本的Linux下C++的编译和make

    1 g 的简单用法 维护过一段时间的Linux下的C 项目 makefile等都是自动生成的 印象中这个makefile比较短小精干 会引用其他的makefie 以及加些编译的路径 我也能写项目的心需求 或改项目的bug 不过不是很明白它具
  • DIP及CV代码练习(1):图像16倍下采样

    下采样和上采样是图像处理中经常碰到的操作 所以对这部分代码的熟悉应该是基本功中的基本功 上采样的基本原理是插值 实际开发中由于受限于性能和耗时的需求 还是线性的插值用得比较多 与上采样相比 下采样的基本原理更为简单 以16倍下采样为例 相当
  • AIGC-Stable Diffusion Webui-AI作画初体验

    一 项目地址 传送门 github stable diffusion webui 二 安装方式 本地安装 or Google Colab 下文介绍中关于安装的部分均以本地安装为例 本地安装 1 git 2 python 推荐3 10 8 3
  • chunk 15 [mini-css-extract-plugin],加载顺序错误导致的警告

    项目运行时 mini css extract plugin 警告 注意看这两个文件 在项目中找到引用的位置 交换一下顺序 重新运行即可
  • 一个阿里巴巴码农的六年回眸

    原文地址 http kb cnblogs com page 160480 本文由淘宝开放平台技术产品负责人 放翁 文初撰写 它讲述了一个个冷冰冰产品背后的活生生的人了 也在讲述着一个码农的六年心路历程 技术耐得住寂寞 低谷积累高峰冲刺 主动
  • 前端需要注意和了解的SEO

    SEO的基本了解 1 什么是SEO SEO Search Engine Optimization又叫做搜索引擎优化 是一种方式 利用搜索引擎的规则提高网站在有关搜索引擎内的自然排名 2 前端怎么理解SEO 对于SEO引擎 在前端需要的是做出
  • 内核源码中版本号详解(KERNEL_VERSION & KERNEL_VERSION)

    1 内核源码中版本的定义 VERSION 2 主版本号 PATCHLEVEL 6 主版本号 SUBLEVEL 35 更次的版本号 EXTRAVERSION 7 更更次的版本号 NAME Yokohama 1 内核的版本信息定义在内核源码顶层
  • vscode 中,vue导入组件路径提示

    VsCode中 Vue导入组件路径提示 当用Vue组件开发时 经常会引入文件 但又没提示该如何解决 注意 编写vue项目时需要从根目录打开 否则会导致很多插件不能用 1 注意 设置之后的效果 打开VSCode 第一步 点击扩展 第二步 搜索
  • jenkins构建后自动上传svn备份jar包

    第一种 脚本方式 这种方式相当于我们把svn目录拉到本地 svn co命令 然后将jar包拷贝到目录中 然后上传到svn中 mkdir p tmp cd tmp rm rf svn co svn svn haha com release 0
  • 黑马程序员提供得教程

    这里写自定义目录标题 黑马程序员提供得教程 黑马程序员提供得教程 java全套教程 网盘链接 https pan baidu com s 1LxIxcHDO7SYB96SE GZfuQ 提取码 dor4 HTML JS 前端全套教程 网盘链
  • 计算机网络——数据包抓取与分析

    数据包抓取与分析 目录 一 实验目的 二 实验内容 三 实验环境 四 实验步骤与过程 一 实验目的 学习安装 使用协议分析软件 掌握基本的数据报捕获 过滤和协议的分析技巧 能对抓取数据包进行分析 二 实验内容 协议分析软件的安装和使用 学会
  • Vue中使用高德地图

    1 安装依赖 npm i amap amap jsapi loader save tips 如果node版本过高 请使用npm i amap amap jsapi loader save legacy peer deps 参考链接 http
  • XPath用法及常用函数

    目录 XPath简介 XPath语法 选取节点 谓语 Predicates 选取未知节点 选取若干路径 XPath 轴 XPATH的几个常用函数 XPath简介 XPath XML Path Language 是一门在 HTML XML 文
  • centos7 安装curl-7.51.0

    curl简介 curl是一个广泛使用的用来上传和下载的命令行工具 当然严格来讲 它还可以有别的用途 对于测试来讲 它是Web相关测试非常实用的工具 包括debugging 使用起来非常方便 而且另一方面 因为它是纯命令行的工具 所以也可以非
  • 【Pytorch-ACDC】复现U-Net for Cardiac Segmentation记录

    本文持续更新 算法概括 文献链接 U Net Convolutional Networks for Biomedical Image Segmentation 开源项目链接 U Net on ACDC dataset U Net结构示意 结
  • 查看C语言文件依赖关系(用-Wp,MD参数生成.d文件)

    1 wp MD参数介绍 1 在编译c源文件时使用该参数 会生成对应C源文件的 d格式的文件 d格式的文件内容是C源文件的依赖关系 2 C源文件的依赖关系就是源文件调用了哪些头文件 可以方便我们确认工程中的同名头文件到底是引用的哪一份 3 在