“make”是否知道如何搜索包含文件的子目录?

时间:2010-07-07 11:11:43

标签: c++ c include makefile

这是有经验的C / C ++开发人员的问题。

我对用“make”编译C程序知之甚少,需要修改现有的应用程序,即。更改其“config”和“makefile”文件。

应用程序所需的.h文件不在单级目录中,而是分布在多个子目录中。

为了让cc找到所有必需的包含文件,我可以只添加一个“-I”开关将cc指向顶级目录并期望它以递归方式搜索所有子目录,或者我必须添加几个“-I”开关明确地列出所有子目录,例如。 -I / usr / src / myapp / includes / 1 -I / usr / src / myapp / includes / 2等?

谢谢。

4 个答案:

答案 0 :(得分:3)

这个问题似乎与C编译器驱动程序有关,而不是make。假设您正在使用GCC,那么您需要列出要搜索的每个目录:

gcc -I/foo -I/foo/bar myprog.c

答案 1 :(得分:1)

这实际上是一个编译器开关,与自己无关。

编译器将在内置系统目录中搜索包含文件,然后在使用-I开关提供的路径中搜索。但是,不会进行自动子目录遍历。

例如,如果你有

#include "my/path/to/file.h"

并且您将-I a/directory作为参数,编译器将查找a/directory/my/path/to/file.h

答案 2 :(得分:1)

如果makefile是以通常的方式编写的,那么调用编译器的行将使用一些允许您自定义详细信息的变量,例如:不

gcc (...)

$(CC) $(CFLAGS) (...)

如果是这样的话,你很幸运,你甚至不需要编辑任何一个makefile;相反,你可以像这样调用make

make CFLAGS='-I /absolute-path/to/wherever'

将您的特殊选项合并到编译器调用中。

同时检查Makefile是否不是由其他东西生成的(通常,顶层目录中的脚本称为

configure

它将拥有自己的选项来控制进入它们的内容。

答案 3 :(得分:0)

每个人都正确回答了你的问题。但是当你设置自己的源代码树时要考虑的事情......叶子节点应该只在头部,自己的目录或树上看2个位置。一旦人们开始跨越同伴并进入树下,构建系统将变得粗糙,但是当他们应该使用公共接口时,开始使用私有接口的人也会发生什么