gcc -I不会更改include目录

时间:2015-03-02 14:07:24

标签: c++ gcc header-files

我有一个名为code/的文件夹,在此文件夹下我有一个名为include/的文件夹和名为code.cc的源文件,include/包含头文件{{ 1}},a.h,这两个头文件也存在于其他地方,为了使用b.h文件夹中的头文件,我在{{1}中添加了一个标记include/但是我的代码仍然在其他地方使用这些头文件,如果我以下面的方式包含头文件,我的代码使用-Iinclude下的头文件,为什么不Makefile标志更改包含目录?

include/

修改:目录:

-I

生成文件:

#include "include/a.h"
#include "include/b.h"

gcc --version:

code/code.cc
code/Makefile
code/include/a.h
code/include/b.h

3 个答案:

答案 0 :(得分:1)

使用此设置:

code/code.cc
code/Makefile
code/include/a.h
code/include/b.h

通过将-Iinclude/添加到编译器标记,您的#include "include/a.h"将首先在include/a.h文件夹中查找include/。即编译器查找不存在的include/include/a.h,编译器在搜索路径的其他位置查找include/a.h文件。

您的代码必须使用#include "a.h",或者您的-Iinclude/必须是-I. -I。将当前目录添加到搜索路径,以使#include "include/a.h"与文件./include/a.h匹配。确保在任何其他搜索路径之前添加-I.,这也将与您包含的文件匹配。

答案 1 :(得分:0)

-I gcc指令的顺序非常重要。 -I指令在其他地方添加"那些头文件"必须在-Iinclude /include之前到来。

答案 2 :(得分:0)

你必须使用

CFLAGS = -I<full_path_to_project>/code

如果include位于此目录下方,并且您在include语句中包含与其相关的文件

#include "include/a.h"
      // ^^^^^^^^^

如果指定

CFLAGS = -I<full_path_to_project>/code/include

您不需要指定相对包含路径

#include "a.h"

使用-I指定的相对路径将从make使用的工作目录开始。如果此处没有相对路径部分,则省略-I选项,或指定-I./