我正在尝试在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
答案 0 :(得分:0)
通常,如果头文件在多个目录中的源文件之间共享,则它们保存在项目根目录下的include/
树中,然后使用-I$(TOPDIR)/include
之类的内容将include树添加到包含路径,让您的源文件像{I}一样拉入include/foo/bar.h
:
#include "foo/bar.h"
答案 1 :(得分:0)
这个问题很普遍。有很多项目组织的约定以及帮助(autoconf
和类似的)工具,但如果作者没有利用这些东西,你将不得不追捕所有东西并安装{{1你自己。
您可以使用-I
或gcc -M
或许多类似工具之一来获取所需目录的列表。据推测,你甚至可以编写提取脚本。
答案 2 :(得分:0)
在#include指令中指定路径真的不是一个好主意。它使标题 - 以及依赖它的任何东西 - 依赖于特定的目录结构。值得查明是否允许自己清理common_dependencies.h。
如果common_dependencies.h中的路径是正确的,那么你的Makefile将按原样工作(虽然我建议使用绝对路径,而不是“../ ..”),你可以使用像{{3这样的东西为你处理依赖关系。
如果common_dependencies.h中的路径不正确,那么是的,你必须找到它所包含的每个文件,并知道它们的位置是不够的。如果#included包含false路径的文件,即使编译器具有-Ithe_correct_path,编译也会崩溃,因此您必须修复common_dependencies.h或修改目录结构(通过移动,复制或链接到文件)