gpt4 book ai didi

c++ - VSCode c++ task.json包含路径和库

转载 作者:行者123 更新时间:2023-12-02 10:37:46 25 4
gpt4 key购买 nike

IntelliSense使用c_cpp_properties.json >> includePath查找自动完成的 header ,但我注意到我仍然需要在task.json >> task >> args内部指定包含路径来进行构建。

我在文档中发现includePath与我在“-I”中指定的路径几乎相同:

The paths that you specify for this setting are the same paths that you would send to your compiler via the -I switch. When your source files are parsed, the IntelliSense engine will prepend these paths to the files specified by your #include directives while attempting to resolve them. These paths are not searched recursively.*



link
  • 我是否通过指定构建任务的args中的所有库和包含目录来正确设置VSCode?还是应该以其他方式进行?
  • 有人可以用不同的词来解释includePath和browser之间的区别吗?解释链接对我来说不是很清楚

  • 这是我的c_cpp_properties.json的示例:
    {
    "configurations": [
    {
    "name": "Win32",
    "includePath": [
    "${workspaceFolder}/**",
    "D:/github/dependencies/SDL2-2.0.8/include"
    ],
    "defines": [
    "_DEBUG",
    "UNICODE",
    "_UNICODE"
    ],
    "compilerPath": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.exe",
    "cStandard": "c11",
    "cppStandard": "c++17",
    "intelliSenseMode": "clang-x64",
    "browse": {
    "path": [
    "${workspaceFolder}/**"
    ]
    }
    }
    ],
    "version": 4
    }

    和task.json:
    {
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
    {
    "label": "build",
    "type": "shell",
    "command": "g++",
    "args": [
    "-g",
    "main2.cpp",
    "-ID:\\github\\dependencies\\SDL2-2.0.8\\include",
    "-LD:\\github\\dependencies\\SDL2-2.0.8\\lib\\x64",
    "-lSDL2main","-lSDL2", "-lopengl32",
    "-o",
    "test-sdl"
    ]
    }
    ],
    "group": {
    "kind": "build",
    "isDefault": true
    },
    "problemMatcher":"$gcc"
    }

    这是一个简单的问题,但是我是VSCode的新手(对不起)。

    最佳答案

    1.我可以正确设置VSCode吗?

    大多。不可避免的事实是必须两次指定包含路径(一次在c_cpp_properties.json中,一次在描述您的构建的文件中)。在VSCode中,构建系统和编辑器彼此不了解,并且都需要此信息。相反,使用Visual Studio(无“代码”),只需要指定一次路径即可。这是使用“真正的”集成开发环境的好处之一。 (但是也有缺点;我并不是想阻止您使用VSCode。)

    但是,我不建议将包含路径直接放入tasks.json。相反,通常会有一个单独的构建系统,可以从命令行调用它,然后tasks.json也可以调用该命令。

    作为一个非常常见的示例,您可以使用GNU Make并用此(未经测试!)Makefile替换当前的tasks.json:

    test-sdl: main2.cpp
    g++ -g main2.cpp -ID:\\github\\dependencies\\SDL2-2.0.8\\include -LD:\\github\\dependencies\\SDL2-2.0.8\\lib\\x64 -lSDL2main -lSDL2 -lopengl32 -o test-sdl

    这告诉 make如何从 test-sdl构建 main2.cpp,即通过运行所示的 g++命令。 (我故意使此Makefile非常简单,因为问题不是关于Makefile的;请注意,真正的Makefile会破坏一些东西以便更好地组织,并且反斜杠可能需要调整。)

    无论如何,您的 tasks.json都会简化为:
    {
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
    {
    "label": "build",
    "type": "shell",
    "command": "make", // <-- changed
    "args": [] // <-- changed
    }
    ],
    "group": {
    "kind": "build",
    "isDefault": true
    },
    "problemMatcher":"$gcc"
    }

    这样做会更好,因为您不会将关键的构建信息锁定在只有VSCode可以理解的文件中。

    2.有人可以解释... includePath和浏览吗?

    VSCode具有两个用于理解C++代码的系统。有较旧的“Tag Parser”使用 browse.path,较新的“Intellisense”使用 includePath。在这一点上(2019-08-30,VSCode 1.37.1),我的理解基本上是每个人都应该使用较新的Intellisense系统,因为它提供了更准确的信息并且至少应该成熟。因此,您应该能够简单地 忽略 browse.path

    为了确保您使用的是Intellisense而不是Tag Parser,请进入"file"→“偏好设置”→“设置”→“C / C++”→“C_Cpp:Intelli Sense Engine”,并确保它是“默认”而不是“Tag Parser”。请注意,此设置存储在 settings.json中,而不是 c_cpp_properties.json中。

    关于c++ - VSCode c++ task.json包含路径和库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59502942/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com