C++ VSCode 说它无法打开源文件,而实际上它可以

igo*_*uza 2 c++ cmake boost-asio visual-studio-code vcpkg

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

我有以下目录:

root/
  include/
    atr_include.hpp
    user_interface.hpp
  src/
    user_interface.cpp
    CMakeList.txt
  main.cpp
  CMakeList.txt
Run Code Online (Sandbox Code Playgroud)

使用 CMakeList.txt:

root/
  include/
    atr_include.hpp
    user_interface.hpp
  src/
    user_interface.cpp
    CMakeList.txt
  main.cpp
  CMakeList.txt
Run Code Online (Sandbox Code Playgroud)

src / CMakeList:

#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()
Run Code Online (Sandbox Code Playgroud)

包含/atr_include.hpp:

add_library(atr_lib STATIC user_interface.cpp)
Run Code Online (Sandbox Code Playgroud)

包括/user_interface.hpp:

#include <boost/asio.hpp>
#include <chrono>
#include <iostream>
#include <math.h>
#include <mutex>
#include <thread>
Run Code Online (Sandbox Code Playgroud)

src/user_interface.cpp:

#include "atr_include.hpp"

class UserInterface
{
  private:
  public:
};
Run Code Online (Sandbox Code Playgroud)

主要.cpp:

#include <user_interface.hpp>
Run Code Online (Sandbox Code Playgroud)

小智 11

我遇到了同样的问题,它与IntelliSense 配置提供程序项的错误配置有关。

"configurations": [
    {
        ...
        "configurationProvider": "ms-vscode.cmake-tools"
        ...        
    }
Run Code Online (Sandbox Code Playgroud)

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

  • 您还可以使用命令面板进行设置(Shift + F1 -&gt; `&gt;C++: Change Configuration Provider` -&gt; 并选择 `CMake Tools`) (2认同)