【问题标题】:how can I add more folder to c++ include path?如何将更多文件夹添加到 C++ 包含路径?
【发布时间】:2020-07-12 18:52:49
【问题描述】:

我正在尝试使用 Plog 库为自己创建一个示例项目。根据其文档,我必须将其包含文件夹添加到我的包含路径中。所以,我将这些行添加到我的 vs 代码中的 C/C++ 配置中:

${默认}
${workspaceFolder}/**

这是我的主要功能:

#include <iostream>
#include "plog/Log.h"
int main() {
    plog::init(plog::debug, "log.txt");
    std::string name;
    std::cin >> name; 
    LOGD << "user entered name :" << name; 
    std::cout << name << std::endl; 
    return 0;
}

但是当我运行这段代码时,我得到了这个错误:

致命错误:plog/Logger.h:没有这样的文件或目录

哪个plog/Logger.h被主函数中的log.h引用。 包含 plog 库的所有标题的 plog 文件夹位于我的项目根文件夹中。 这是我的文件夹结构:

root
   |_plog
   |    |
   |    |_ all my header files *.h
   |_main.cpp 

还有什么我错过的配置吗?还是我在任何步骤中犯了错误?

【问题讨论】:

    标签: c++ visual-studio-code include-path


    【解决方案1】:

    试试

    #include <plog/Log.h>
    

    【讨论】:

    • 这将错误更改为:致命错误:plog/Log.h:没有这样的文件或目录:'(
    【解决方案2】:

    为什么在 ${workspaceFolder} 之后有 **?

    首先我们需要知道目录结构是什么。比如

    +-- C:\
        +-- ProgramData
            +-- plog-dist
                +-- plog
                    +-- Log.h
                +-- lib
                    +-- plog.lib
                +-- bin
                    +-- plog.dll
        +-- Users
            +-- Me
                +-- Documents
                    +-- myproject
    

    让我们假设您已经设置了环境变量

    setx PLOG=C:\ProgramData\plog-dist
    

    您可以在属性页下管理它,也可以在单个项目中设置它。让我们只做第二种方法,因为它更容易并且解释更少。在 C++ General Properties 下,第一行显示Additional Include Directories。加入

    $(PLOG)
    

    这将获取您的环境变量 PLOG。在你的代码中

    #include "plog/Log.h"
    

    VS 将在 $(PLOG) 中查找 plog/Log.h。如果分布是

    +-- ProgramData
        +-- plog
            +-- Log.h
    

    环境变量是

    setx PLOG=C:\ProgramData\plog
    

    那你就应该

    #include "Log.h"
    

    VS 将在 $(PLOG) 中查找 Log.h

    接下来转到属性的链接器部分。在这里,您将看到其他库目录。添加 $(PLOG)/lib.这是它可以找到 plog.lib 的地方。如果 plog.lib 位于 $(PLOG) 中,则添加 $(PLOG)。这真的取决于目录结构是什么。

    接下来转到输入属性页面。在 Additional Dependencies 下添加 plog.lib

    如果您设置 PLOG 变量并从 cmd 行键入 tree /f %PLOG%,它将告诉您所有内容相对于 $(PLOG) 的位置。

    【讨论】:

    • 我在 linux 上,我只是在使用 plog 代码。我已经更新了关于我的目录结构的问题,另外 ** 表示在文件夹中递归搜索头文件(根据 vs 代码文档)。
    • 在这种情况下,您需要添加任何内容 - plog 与 main 处于同一级别。你的 Log.h 的大小写正确吗?是 log.h 吗?
    【解决方案3】:

    假设下面是您的文件夹层次结构:

    root
       |_plog
       |    |
       |    |_ Init.h
       |    |_ Log.h
       |    |_ Init.h
       |    |_ Other plog's *.h files
       |_main.cpp 
    

    在这种情况下,将${workspaceFolder} 添加到您的包含路径就足够了。

    当您执行#include "plog/Log.h" 时,它期望plog 文件夹是包含路径的直接子级。由于plog 文件夹是${workspaceFolder} 目录的直接子目录,这应该可以工作。

    【讨论】:

    • 你的意思是我只添加了一个父文件夹,比如“inc”,然后将 plog 移到其中,然后将我的包含路径设置为“${workspaceFolder}/inc”?
    • 这对我不起作用...相反,我根据此链接在 g++ 编译器上使用 -I 参数:stackoverflow.com/a/6141166/1093228
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多