Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在make dependency list中检测标题更改_C++_Makefile - Fatal编程技术网

C++ 如何在make dependency list中检测标题更改

C++ 如何在make dependency list中检测标题更改,c++,makefile,C++,Makefile,在经历了近十年的C#和VC++编码之后,我又回到了linux–g++–make–emacs环境 尝试刷新关于编写make文件的记忆我没有很多问题,但我在以下问题上遇到了问题,我承认我不记得过去是如何解决的: 假设一个特定的.cpp文件与其他几个头文件有一些依赖关系(将其对应的头文件放在一边,这样很容易处理)…检测某些.h文件已更改的最佳方法是什么 我当然不喜欢将它们放在我的目标依赖列表中,因为这是一个手动且容易出错的过程 当然,简单的答案是,只要有.h变化,就要构建干净的,但我真的不记得标准方法

在经历了近十年的C#和VC++编码之后,我又回到了linux–g++–make–emacs环境

尝试刷新关于编写make文件的记忆我没有很多问题,但我在以下问题上遇到了问题,我承认我不记得过去是如何解决的:

假设一个特定的.cpp文件与其他几个头文件有一些依赖关系(将其对应的头文件放在一边,这样很容易处理)…检测某些.h文件已更改的最佳方法是什么

我当然不喜欢将它们放在我的目标依赖列表中,因为这是一个手动且容易出错的过程

当然,简单的答案是,只要有.h变化,就要构建干净的,但我真的不记得标准方法是什么


在VC++中,我不必处理这个问题,因为IDE非常擅长处理依赖项…

请看。带有-M-MD-MT等标志的gcc将解析您的文件并计算依赖项。让他们通过sed。google会找到很多例子。

正如@deinst所提到的,gcc能够直接或间接输出cpp使用的所有头文件。您需要的大致如下:

obj-file: src-file

# dep file should be recreated each time header file or header file it depends on is changed
dep-file: src-file 
    gcc -M ...... > dep-file
    modify dep-file to make dep-file depend and all header files too

include dep-file
它在我参与的项目中实施过一次,但这个想法的全面实施是漫长而棘手的


如果有可能,请考虑支持AutoDebug的高级工具,如OR。我个人与cmake合作过-每个程序员都可以编写cmake文件,并且AutoDependence是免费的。

deinst和idimba让您走上了正确的道路。要了解您可能遇到的潜在陷阱以及如何避免它们,请阅读本文