编译器无法在 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>
我有一个 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>