C++ 是不是;制造;知道如何搜索包含文件的子目录吗?

C++ 是不是;制造;知道如何搜索包含文件的子目录吗?,c++,c,include,makefile,C++,C,Include,Makefile,对于有经验的C/C++开发人员来说,这是一个问题 我对使用“make”编译C程序一无所知,需要修改现有的应用程序,即更改其“config”和“makefile”文件 应用程序需要的.h文件不位于单个级别的目录中,而是分布在多个子目录中 为了让cc找到所有必需的include文件,我可以只添加一个“-I”开关,将cc指向顶级目录并期望它递归搜索所有子目录,还是必须添加几个“-I”开关来明确列出所有子目录,例如,-I/usr/src/myapp/includes/1-I/usr/src/myapp/

对于有经验的C/C++开发人员来说,这是一个问题

我对使用“make”编译C程序一无所知,需要修改现有的应用程序,即更改其“config”和“makefile”文件

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

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


谢谢。

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

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

这实际上是一个编译器开关,与make本身无关

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

例如,如果你有

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

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

如果makefiles是以通常的方式编写的,那么调用编译器的行将使用允许您自定义细节的两个变量,例如not

gcc (...)
但是

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

make CFLAGS='-I /absolute-path/to/wherever'
将特殊选项合并到编译器调用中

还要检查Makefiles是否不是由其他内容生成的(通常是顶部目录中名为

configure

每个人都正确地回答了你的问题。但是当你要建立自己的源树时要考虑一些事情…叶节点应该只在其自己的目录或树上的两个位置查找标题。一旦人们开始接触到同龄人并进入到树下,构建系统将变得粗糙,但也会发生的是,当人们应该使用公共接口时,他们开始使用私有接口

谢谢大家,这是我所怀疑的;-)然后,我必须用-I添加所有子目录。请注意,如果源代码使用
#include“1/foo.h”
,则只需要
-I/usr/src/myapp/includes
,而不是
-I/usr/src/myapp/includes/1
。您不能仅根据目录结构给出答案。
configure