如何包含不带引号的头文件?

时间:2018-10-17 23:37:53

标签: c++ codeblocks

我是编程的新手,所以请放轻松。无论如何,我都知道要包括您自己定义的头文件。例如:

#include "yourHeader.h"

我正在尝试将FLTK用于其GUI选项,但是,它的许多头文件都使用包含如下内容的头文件来包含其他头文件:

#include <FL/Blah.h>

代替此:

#include "FL/Blah.h"

我必须转到每个包含在尖括号中的头文件,然后将其更改为引号以使其起作用。如果重要的话,我目前正在CodeBlocks工作。有什么方法可以使用尖括号而不是引号包括头文件,还是我不得不自己进入头文件并手动将它们全部换掉?

3 个答案:

答案 0 :(得分:1)

通常,头文件来自

#include "headerfile"

将在当前源路径中搜索。如果搜索失败,将对其进行重新处理,就像

#include <header file>

确实。

您的FLTK库正在使用包含以下内容的内容吗?

#include <FL/Blah.h>

FL的父路径应位于预定义的INCLUDE路径中。您可以编辑Makefile或项目设置。

答案 1 :(得分:0)

您可以在编译时将包含所有标头的文件夹添加到包含路径。 How to add a default include path for GCC in Linux?

答案 2 :(得分:0)

一些背景

好的,包含搜索路径有两组。

用户包含路径:
通常这只是当前目录(也称为“。”)。
注意:可能是其他,但为简单起见,请仅使用“。”在下面的示例中。

然后有系统包含路径:
通常在您计算机中的几个位置(可以是 / usr / include / usr / local / include )。
注意:可能是其他情况,但为简单起见,请在下面的示例中进行假设。

通常如何工作。

有一些警告,并不是所有的编译器都完全一样。但是以下是一个很好的经验法则。

当您使用引号""包含文件时。

#include "yourHeader.h"

它将在“用户包含路径”中指定的所有目录中搜索此文件。如果找不到它们,它将在“系统包含路径”指定的所有目录中查找。因此,您的编译器将搜索以下文件:

./yourHeader.h
/usr/include/yourHeader.h
/usr/local/include/yourHeader.h

它将使用找到的第一个。

在包含文件中使用<>时:

#include <FL/Blah.h>

它将首先在“系统包含路径”中搜索文件。然后,取决于您的编译器,可以有选择地搜索“用户包含路径”(但现在不做假设)。

因此在这种情况下,它将搜索文件:

/usr/include/FL/Blah.h
/usr/local/include/FL/Blah.h

它将使用找到的第一个。

修改默认值

因此,这是将在文件中搜索的默认路径。但是,编译器将允许您(通常)向这两个搜索路径添加额外的路径。这取决于您的编译器如何添加搜索路径。

对于gcc(可能还有clang),它使用-I-isystem(可能还有更多)

期望。

当您在include标头中看到<>时,通常意味着这是您正在寻找的已安装的库。因此,您的代码假定FLTK库已经安装在您的计算机上。

在包含标头中看到""时,应假定它是属于项目的本地文件。