Makefile 使包含正方形

Makefile 使包含正方形,makefile,Makefile,我正在尝试在Solaris 10上使用CC编写一个makefile。[我认为,只有第一点真正重要]。我对foo.o有以下规则: foo.o: foo.cc common_dependencies.h CC -c foo.cc -I../../common 不幸的是,common_dependencies.h在未命名为“.”或“../../common”的目录中包含各种特殊垃圾。这是不是必须是一个蛮力生成文件,我在其中找出所有依赖路径?所有依赖项都位于“....”下,但有时是1级,有时是

我正在尝试在Solaris 10上使用CC编写一个makefile。[我认为,只有第一点真正重要]。我对foo.o有以下规则:

foo.o: foo.cc common_dependencies.h
    CC -c foo.cc -I../../common
不幸的是,common_dependencies.h在未命名为“.”或“../../common”的目录中包含各种特殊垃圾。这是不是必须是一个蛮力生成文件,我在其中找出所有依赖路径?所有依赖项都位于“....”下,但有时是1级,有时是2级


-感谢Neil

通常,如果头文件在多个目录中的源文件之间共享,它们将保存在项目根目录下的include/树中,然后使用-I$TOPDIR/include之类的东西将include树添加到include路径,并让源文件拉入include/foo/bar.h,如下所示:


总的来说,这个问题相当棘手。对于项目组织和工具来说,有很多约定可以帮助autoconf和类似的工具,但是如果作者没有利用这些东西,你就必须找到所有的东西并安装-就是你自己


您可以使用gcc-M或makedepends或许多类似工具中的一种来获取所需目录的列表。您甚至可以编写提取脚本。

在include指令中指定路径确实不是一个好主意;它使标头以及依赖于它的任何内容依赖于特定的目录结构。值得一看的是,你是否被允许清理公共依赖项.h本身

如果common_dependencies.h中的路径正确,那么您的Makefile将按原样工作,尽管我建议使用绝对路径,而不是../,并且您可以使用类似的东西来处理依赖关系


如果common_dependencies.h中的路径不正确,那么是的,您必须找到它包含的每个文件,并且知道它们在哪里是不够的。如果它包含一个带有错误路径的文件,即使编译器具有正确路径,编译也会崩溃,因此您必须修复公共依赖项.h,或者通过移动、复制或链接到文件来修改目录结构。

这可能是典型的,但在David描述的情况下并不适用。实际上,这是可以的。我们,嗯,正在“重复使用”一些非常混乱的遗产。不过,我们还没有将其基线化,所以我冒昧地制作了一份本地副本(不管说什么做什么,它都不是很大)并重新组织了它。所以,我要做更多的家务。我使用了CC-xM1,这是惯用用法,但它会将找不到的内容转储到STDERR,也就是说,CC-xM1 foo.CC>依赖项会得到它能找到的所有内容,而不会得到任何找不到的内容。我可以用python编写它,这对我来说是最自然的,但可能需要一个小时,我只是想在开始切线之前进行社区检查。谢谢,不过,我很感谢反馈。这段代码一开始只是一个目录中的一个小团,没有任何单元测试,具有非当前的修订历史记录[上次更改'94,例如//B.Lah的调试语句12/01除外]。使查找依赖关系变得容易,它们都是整体的一部分,但它混淆了大多数质量实践。我希望做一些组织上的改变来影响后者。[这可能包括重构公共的_dependencies.h,因为它被严重破坏了]。谢谢,建议已采纳,推荐已被认可。
#include "foo/bar.h"