编译器无法在 C++ 的头文件中找到头文件

Compiler cannot find header file within header file in C++

我有一个 yaml-cpp 库提供的头文件,yaml.h

yaml.h:

#include "yaml-cpp/parser.h"
#include "yaml-cpp/emitter.h"
#include "yaml-cpp/emitterstyle.h"
#include "yaml-cpp/stlemitter.h"
#include "yaml-cpp/exceptions.h"

#include "yaml-cpp/node/node.h"
#include "yaml-cpp/node/impl.h"
#include "yaml-cpp/node/convert.h"
#include "yaml-cpp/node/iterator.h"
#include "yaml-cpp/node/detail/impl.h"
#include "yaml-cpp/node/parse.h"
#include "yaml-cpp/node/emit.h"

main.cpp

#include "./lib/yaml-cpp/include/yaml.h"

int main()
{
    YAML::Node config = YAML::LoadFile("config.yaml");
    return 0;
    
}

所有的头文件都在同一个目录(/home/user/application/libs/yaml-cpp/include),但是编译器找不到parser.h和所有其他的包含。为什么会这样,我该如何解决?

我试过使用 g++ -I/home/user/application/libs/yaml-cpp/include main.cpp 但没有用。

我在 linux 环境中。当头文件保存在 /usr/lib64 中时一切正常,但我不允许为这个项目这样做。

当您的文件 yaml.h 本身包含其他类似这样的文件时:

#include "yaml-cpp/parser.h"

那么预期的目录布局如下:

somewhere/
  |
  +-- yaml.h
  |
  +-- yaml-cpp/
        |
        +-- parser.h

您应该将 -Isomewhere 传递给您的编译器,并在您自己的源代码中像这样使用头文件 yaml.h

#include <yaml.h>