制作#include正方形

时间:2010-03-31 16:32:47

标签: makefile

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

foo.o: foo.cc common_dependencies.h
    CC -c foo.cc -I../../common

不幸的是,common_dependencies.h包含各种特殊垃圾,在未命名为“。”的目录中。或'../../common'。这只是一个暴力makefile文件,我找出所有的依赖路径?所有的依赖都在'../ ..'之下,但有时会降低1级,有时会降低2级。

-Thanks Neil

3 个答案:

答案 0 :(得分:0)

通常,如果头文件在多个目录中的源文件之间共享,则它们保存在项目根目录下的include/树中,然后使用-I$(TOPDIR)/include之类的内容将include树添加到包含路径,让您的源文件像{I}一样拉入include/foo/bar.h

#include "foo/bar.h"

答案 1 :(得分:0)

这个问题很普遍。有很多项目组织的约定以及帮助(autoconf和类似的)工具,但如果作者没有利用这些东西,你将不得不追捕所有东西并安装{{1你自己。

您可以使用-Igcc -M或许多类似工具之一来获取所需目录的列表。据推测,你甚至可以编写提取脚本。

答案 2 :(得分:0)

在#include指令中指定路径真的不是一个好主意。它使标题 - 以及依赖它的任何东西 - 依赖于特定的目录结构。值得查明是否允许自己清理common_dependencies.h。

如果common_dependencies.h中的路径是正确的,那么你的Makefile将按原样工作(虽然我建议使用绝对路径,而不是“../ ..”),你可以使用像{{3这样的东西为你处理依赖关系。

如果common_dependencies.h中的路径不正确,那么是的,你必须找到它所包含的每个文件,并知道它们的位置是不够的。如果#included包含false路径的文件,即使编译器具有-Ithe_correct_path,编译也会崩溃,因此您必须修复common_dependencies.h或修改目录结构(通过移动,复制或链接到文件)