当包含头文件的文件不在根项目文件夹中时,如何包含它

How to include a header file when the file that is including it is not in the root project folder?

本文关键字:文件 何包含 文件夹 项目 包含头 项目文件      更新时间:2023-10-16

我正在努力学习如何在C++中更好地组织项目及其文件。

我的简单测试项目似乎只有在main.cpp(和main.exe)位于根项目文件夹中时才能工作。以下是我想要尝试设置的方式。

  • 项目
    • .vscode
      • c_cpp_properties.json
    • 收割台
      • header.h
    • 主要
      • main.cpp
      • main.exe

main.cpp内部,我有#include "headers/header.h"

当我试图用这个设置编译它时,我得到了这个错误fatal error: headers/header.h: No such file or directory

我想知道,当以下安装程序(子文件夹中没有main.cpp)编译并运行良好(没有更改任何代码)时,为什么这不起作用。

  • 项目
    • .vscode
      • c_cpp_properties.json
    • 收割台
      • header.h
    • main.cpp
    • main.exe

我正在使用带有C/C++和C/C++编译-运行扩展的Visual Studio代码(如果相关)。

编辑:

将其更改为"../headers/header.h"确实有效,但我想知道如果不使用../,我该如何做到这一点。

如果我理解正确,我只需要在c_cpp_properties.json中的includePath中添加一些内容。以下是"includePath"部分现在的样子。

"includePath": [
"${workspaceFolder}/**"
],

所以我想我只需要让它像一样

"includePath": [
"${workspaceFolder}/**",
"..."
],

我到底应该在...部分放些什么?

编译特定文件时,编译器会查看该文件的路径。所以,在您的第一个示例中,它是.../Project/main/main.cpp,但在您的第二个示例中是../Project/main.cpp。所以现在很明显为什么在第二种情况下看headers/header.h的路径是有效的,而不是第一种情况。

然而,如果您愿意,您当然可以将main.cpp保留在main目录中,您只需要设置INCLUDE_PATH目录。如果您使用的是Makefile,那么这将是一个简单的-I标志添加,但由于您使用VS代码,您可能需要研究这个问题。很抱歉,我不能提供更详细的解决方案,我真的不熟悉VS代码环境。