Невозможно скомпилировать C++ Hello World с помощью Clang на Mac Sequoia 15.0 и VS Code

Вопрос или проблема

Я обновил XCode (версия 16.0) и убедился, что инструменты командной строки Xcode (версия xcode-select 2409) также обновлены.

Я установил расширение C/C++ для VS Code версии 1.21.6.

Путь к моему компилятору установлен как /usr/bin/clang++.

При выполнении команды clang++ --version я вижу следующий вывод:

Apple clang version 16.0.0 (clang-1600.0.26.3)
Target: arm64-apple-darwin24.0.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

Когда я следую руководству hello world по адресу https://code.visualstudio.com/docs/cpp/config-clang-mac, я вижу красную волну для первого include с ошибкой:

Ошибки #include обнаружены. Пожалуйста, обновите ваш includePath.

Я тщательно искал по своей файловой системе и нашел много каталогов, которые содержат iostream, каждый из которых специфичен для версии macOS.

Я попробовал добавить дополнительный includePath, в котором действительно содержится iostream:

/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1

Но когда я пытаюсь собрать, я все равно получаю ошибку:

фатальная ошибка: файл 'iostream' не найден

Документация звучит так, как будто если у меня правильный путь к компилятору, то это должно работать:

Расширение использует настройку compilerPath для вывода пути к заголовочным файлам стандартной библиотеки C++.

Когда я запускаю проект C++ в XCode и собираю, и запускаю тот же код hello-world, все работает отлично. Я новичок в C++ и не знаю, как продолжить устранение неполадок и правильно указать расширение VS Code C/C++ на стандартную библиотеку.

Файл c_cpp_properties для справки:

{
    "configurations": [
        {
            "name": "Mac",
            "includePath": [
                "${workspaceFolder}/**",
                "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1"
            ],
            "defines": [],
            "macFrameworkPath": [
                "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks"
            ],
            "compilerPath": "/usr/bin/clang++",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "macos-clang-arm64"
        }
    ],
    "version": 4
}

Файл tasks.json для справки:

{
  "tasks": [
    {
      "type": "cppbuild",
      "label": "C/C++: clang++ сборка активного файла",
      "command": "/usr/bin/clang++",
      "args": [
        "-std=c++17",
        "-pedantic-errors",
        "-Wall",
        "-Weffc++",
        "-Wextra",
        "-Wconversion",
        "-Wsign-conversion",
        "-ggdb",
        "-Werror",
        "-fcolor-diagnostics",
        "-fansi-escape-codes",
        "-g",
        "${file}",
        "-o",
        "${fileDirname}/${fileBasenameNoExtension}"
      ],
      "options": {
        "cwd": "${fileDirname}"
      },
      "problemMatcher": [
        "$gcc"
      ],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "detail": "Задача сгенерирована отладчиком."
    }
  ],
  "version": "2.0.0"
}

Запуск clang++ непосредственно из командной строки дает следующий вывод:

clang++ -std=c++17 -g /Users/todd/temp/vscode-c++/hello-world.cpp -o /Users/todd/temp/vscode-c++/hello-world
/Users/todd/temp/vscode-c++/hello-world.cpp:1:10: фатальная ошибка: файл 'iostream' не найден
    1 | #include <iostream>
      |          ^~~~~~~~~~
1 ошибка сгенерирована.

Обновление:
Теперь я могу скомпилировать код hello world через командную строку с аргументом isystem.

clang++ -std=c++17 -isystem /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1 hello-world.cpp -o hello-world

Ответ или решение

Конечно! Давайте разберемся с вашей проблемой компиляции программы "Hello World" на C++ в Visual Studio Code (VS Code) с использованием компилятора Clang на macOS Sequoia.

Проблема

Вы видите ошибки при компиляции, свидетельствующие о том, что заголовочные файлы, такие как <iostream>, не могут быть найдены. При этом запуск программы в Xcode работает исправно. Из вашего сообщения видно, что вы обновили инструменты командной строки Xcode и правильно настроили путь к компилятору.

Решение

Вот шаги, которые могут помочь решить вашу проблему:

  1. Проверка пути к заголовочным файлам C++:
    Убедитесь, что вы используете правильный путь к заголовочным файлам C++. Вы можете проверить доступные пути, выполнив команду:

    echo | clang++ -E -x c++ -dM -

    Эта команда покажет вам доступные включаемые пути.

  2. Настройка c_cpp_properties.json:
    В вашем файле c_cpp_properties.json добавьте путь в includePath, используя -isystem, чтобы указать на заголовочные файлы C++. Например:

    "includePath": [
       "${workspaceFolder}/**",
       "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1"
    ],

    Убедитесь, что используете его как system:

    "args": [
       "-std=c++17",
       "-isystem", "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1",
       ...
    ],
  3. Обновление tasks.json:
    В вашем файле tasks.json, добавьте -isystem перед путём к стандартной библиотеке, чтобы компилятор мог видеть заголовочные файлы:

    "args": [
       "-std=c++17",
       "-isystem", "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1",
       ...
    ],
  4. Проверка настроек VS Code:
    Убедитесь, что в настройках VS Code указаны правильные конфигурации. Откройте настройки (File -> Preferences -> Settings или Cmd + ,) и настройте необходимые параметры.

  5. Перезагрузка VS Code:
    После внесения изменений, перезагрузите VS Code, чтобы убедиться, что все изменения вступили в силу.

Пример полного файла tasks.json:

{
  "tasks": [
    {
      "type": "cppbuild",
      "label": "C/C++: clang++ build active file",
      "command": "/usr/bin/clang++",
      "args": [
        "-std=c++17",
        "-isystem", "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1",
        "-pedantic-errors",
        "-Wall",
        "-Weffc++",
        "-Wextra",
        "-Wconversion",
        "-Wsign-conversion",
        "-ggdb",
        "-Werror",
        "-fcolor-diagnostics",
        "-fansi-escape-codes",
        "-g",
        "${file}",
        "-o",
        "${fileDirname}/${fileBasenameNoExtension}"
      ],
      "options": {
        "cwd": "${fileDirname}"
      },
      "problemMatcher": [
        "$gcc"
      ],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "detail": "Task generated by Debugger."
    }
  ],
  "version": "2.0.0"
}

Заключение

После выполнения всех этих шагов ваша программа должна успешно компилироваться в VS Code. Если проблема продолжит возникать, попробуйте переустановить расширение C/C++ для VS Code или запустите компилятор напрямую через терминал с теми же параметрами, которые вы указали в tasks.json, для проверки наличия ошибок.

Если потребуется дальнейшая помощь, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...