这是有经验的C / C ++开发人员的问题。
我对用“make”编译C程序知之甚少,需要修改现有的应用程序,即。更改其“config”和“makefile”文件。
应用程序所需的.h文件不在单级目录中,而是分布在多个子目录中。
为了让cc找到所有必需的包含文件,我可以只添加一个“-I”开关将cc指向顶级目录并期望它以递归方式搜索所有子目录,或者我必须添加几个“-I”开关明确地列出所有子目录,例如。 -I / usr / src / myapp / includes / 1 -I / usr / src / myapp / includes / 2等?
谢谢。
答案 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)