VSCode c ++ task.json включает в себя путь и библиотеки - PullRequest
0 голосов
/ 21 октября 2018

IntelliSense использует c_cpp_properties.json >> includePath, чтобы найти заголовки для автозаполнения, но я заметил, что мне все еще нужно указать путь включения внутри task.json >> tasks >> args для сборки.

В документации я обнаружил, что includePath - это почти тот же путь, который я указал бы в «-I»:

Пути, которые вы указываете для этого параметра, - это те же пути, которые вы отправляетеваш компилятор через ключ -I.Когда ваши исходные файлы анализируются, механизм IntelliSense добавит эти пути к файлам, указанным в ваших директивах #include, при попытке их разрешения.Эти пути не ищутся рекурсивно. *

link

  1. Правильно ли я настраиваю VSCode, указав все библиотеки и каталоги include внутриАргументы сборки такс?Или это должно быть сделано по-другому?
  2. Может кто-нибудь объяснить, используя разные слова, в чем разница между includePath и browse?Ссылка для объяснения мне не совсем понятна

Вот пример моего 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 (извините).

Ответы [ 3 ]

0 голосов
/ 31 мая 2019

Я также новичок в VS Code, я также никогда не создавал большие проекты на c ++, сейчас я решил сборку, как это ...

Я закончил тем, что делал это в своих задачах. Json ...

 "tasks": [
    {
        "type": "shell",
        "label": "g++ build active file",
        "command": "${workspaceFolder}/buildMysorcery.sh",
        "options": {
            "cwd": "/usr/bin"
        }
    },

(похоже, вы не можете избежать пробелов в свойстве args, https://github.com/Microsoft/vscode/issues/36733),

Я удалил свойство args и установил свойство команды для запуска скрипта (buildMysorcery.ш) который просто делает

#!/bin/bash

g++ fullpathtodir/hello.cpp -Wall -g $(sdl2-config --cflags --libs) -o fullpathtodir/hello

Замените fullpathtodir вашими путями

0 голосов
/ 31 августа 2019

1.Я правильно настраиваю VSCode?

В основном.Тот факт, что вам нужно указывать пути включения дважды (один раз в c_cpp_properties.json и снова в файле, описывающем вашу сборку), неизбежен.В VSCode система сборки и редактор не понимают друг друга, и оба нуждаются в этой информации.В отличие от Visual Studio (без «кода»), необходимо будет указать пути только один раз;это одно из преимуществ использования «истинной» интегрированной среды разработки.(Но есть и недостатки; я не пытаюсь отговорить вас от использования VSCode.)

Однако я не рекомендую вставлять пути включения непосредственно в tasks.json.Скорее, обычно имеется отдельная система сборки, которую можно вызывать из командной строки, а затем tasks.json также вызывает эту команду.

В качестве очень распространенного примера вы можете использовать GNU Make и замените ваш текущий tasks.json этим (непроверенным!) Makefile:

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 сломает вещи для лучшей организации, и обратная косая черта, вероятно, нуждается в корректировке.)

Inв любом случае ваш 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 и browse?

VSCode имеет две разные системы для понимания кода C ++.Существует более старый «Tag Parser», который использует browse.path, и более новый «Intellisense», который использует includePath.На данный момент (2019-08-30, VSCode 1.37.1), насколько я понимаю, в основном все должны использовать более новую систему Intellisense, поскольку она предоставляет более точную информацию и должна быть, по крайней мере, такой же зрелой.Следовательно, вы должны иметь возможность просто игнорировать browse.path.

Чтобы убедиться, что вы используете Intellisense, а не анализатор тегов, перейдите в Файл → Настройки → Настройки → C / C ++ → ».C_Cpp: Intelli Sense Engine "и убедитесь, что это" Default ", а не" Tag Parser ".Обратите внимание, что этот параметр хранится в settings.json, а не c_cpp_properties.json.

0 голосов
/ 02 марта 2019

Я не уверен, является ли ваш вопрос подмножеством более крупной проблемы, поскольку ваша программа не может скомпилировать bcs. IntelliSense испытывает проблемы с включением внешних библиотек.Если это проблема, прочитайте мой пост.Если нет, пропустите это и подробно опишите, в чем ваша проблема.

добавление пользовательской библиотеки в код Visual Studio

У меня была похожая проблема с вами, и я исправил еепо этой ссылке.

По сути, вам нужно включать библиотеки заголовков, где бы ни находился путь вашего компилятора.В моем случае мне нужно поместить заголовочные файлы в C: \ TDM-GCC-64 \ x84_64-w64-mingw32 \ include.

Так что я не знал, каков был мой путь к компилятору, так что это то, что ясделал, чтобы найти это.Поместите в вашу программу общий заголовочный файл, в котором вы знаете, что он скомпилирует и найдет путь.В моем случае я поставил #include, потому что везде вижу zmouse.h.Конечно же, мой код принял включение.Затем я сделал F12 над библиотекой, и он должен указать мне пути, по которым был найден заголовок.И вот как я нашел путь!Я надеюсь, что это поможет и ответит на ваш вопрос

...