【问题标题】:C++ VSCode says it cannot open source file when it really canC ++ VSCode说它确实不能打开源文件
【发布时间】:2022-10-17 17:20:25
【问题描述】:

我可以毫无问题地运行和编译,但是 VSCode Intellisense 说它无法打开源文件 boost/asio.hpp(即使它显然可以)并且一直将其标记为错误,我想知道它为什么这样做它以及如何修复它

我有以下目录:

root/
  include/
    atr_include.hpp
    user_interface.hpp
  src/
    user_interface.cpp
    CMakeList.txt
  main.cpp
  CMakeList.txt

使用 CMakeList.txt:

#CMake minimum version
cmake_minimum_required(VERSION 3.0.0)


#C++ Standard version
set(CMAKE_CXX_STANDARD 20)

### Searches for the VCPKG
if(DEFINED ENV{VCPKG_ROOT})
    set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake")
endif()

project(main LANGUAGES CXX VERSION 0.1.0 )

find_package(Boost COMPONENTS system json REQUIRED)

add_executable(${PROJECT_NAME} main.cpp)

include_directories(include)
link_directories(src)
add_subdirectory(src)
link_libraries(atr_lib)

if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})
    link_libraries(${PROJECT_NAME} ${Boost_LIBRARIES})
endif()

if(MSVC OR MSYS OR MINGW)
    target_link_libraries(${PROJECT_NAME} ws2_32)
endif()

源/CMakeList:

add_library(atr_lib STATIC user_interface.cpp)

包括/atr_include.hpp:

#include <boost/asio.hpp>
#include <chrono>
#include <iostream>
#include <math.h>
#include <mutex>
#include <thread>

包括/user_interface.hpp:

#include "atr_include.hpp"

class UserInterface
{
  private:
  public:
};

src/user_interface.cpp:

#include <user_interface.hpp>

主.cpp:

#include <user_interface.hpp>

int main() { return 0; }

【问题讨论】:

    标签: c++ visual-studio-code cmake boost-asio vcpkg


    【解决方案1】:

    VSCode 不是 C++ 编译器。它(主要)是一个文本编辑器和一些开发工具。它只是运行一些 C++ 编译器,以便实际编译和构建 C++ 代码。

    您的实际 C++ 编译器是它在哪里可以找到各种头文件的最终和最终权威。

    无论出于何种原因,您的 VSCode 配置都不知道 boost 的头文件安装在哪里,所以这就是它告诉您的。你的编译器知道,但那是你的编译器,而不是 VSCode。

    所以,不,VSCode 真的无法打开或找到这些头文件。你的问题是:

    我想知道它为什么这样做

    因为它根本不知道。它不是您的 C++ 编译器,它不会自动知道所有头文件的安装位置。

    以及如何解决它

    这...取决于您非常非常具体的计算机、操作系统(VSCode 可用于多个操作系统)、您实际使用的与 VSCode 一起使用的 C++ 编译器,以及如何使用确切地您正在使用 VSCode(例如,在短时间内,我使用 VSCode 来编辑甚至不在同一台计算机上但通过 ssh 访问的文件)。这些因素中的每一个都会影响一切的运作方式。

    如果你知道 boost 的头文件安装在哪里,这可能只是挖掘 VSCode 的配置设置的问题,一定有一个设置告诉 boost 哪些目录包含要搜索的头文件。如果您不知道 boost 的头文件安装在哪里,那么您的第一步就是弄清楚该部分,然后再进行其他任何操作。

    【讨论】:

    • 这很奇怪,因为我觉得我已经告诉 VSCode 它在哪里,包括 C/C++ 配置的“强制包含路径”,它仍然告诉我它是错误的
    【解决方案2】:

    我遇到了同样的问题,这与 IntelliSense Configuration Provider 项目的错误配置有关。

    "configurations": [
        {
            ...
            "configurationProvider": "ms-vscode.cmake-tools"
            ...        
        }
    

    之前的值对应于另一个不再安装的 Cmake 扩展。将值更改为ms-vscode.cmake-tools(我安装了“CMake Tools”扩展),IntelliSense 开始正常工作。提升标头也正确包含 VS Code 中没有错误。

    【讨论】: