首页 > 解决方案 > 如何:使用 CMake 构建系统在 Visual Studio 中附加包含 C++ 项目的路径?

问题描述

当离开原始 Arduino IDE 并切换到(例如)Visual Studio Code 时,您可以通过向

c_cpp_properties.json

看起来像这样:

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "C:/Users/steven/AppData/Local/Arduino15/packages/**"
            ],
            ...
        }
    ],
    "version": 4
}

在这里,我添加了 Arduino 头文件的目录,以便 VS Code 能够从 Arduino 空间中找到定义。

如果底层项目是 CMake 项目而不是本机 VS 项目,有没有办法在老大哥 Visual Studio 中做同样的事情?如果它是本机 VS 项目,我可以通过调用项目文件属性页来添加目录。这在 CMake 项目中似乎是不可能的。由于有关代码重构的更复杂的选项(例如,如果您使用 ReSharper++ 或类似工具),让它甚至可以在 VS 中工作会很棒。

更新:现在我将使用这个解决方案:

# ========= Providing intellisense for Arduino =========

if(EXISTS "${ConfigurationsDir}/arduino.ini") # arduino.ini is ignored by git and need to be provided separately per environment
    SetConfigurationValuesByFile("${ConfigurationsDir}/arduino.ini") # read config file with Arduino paths and create key/value pairs from ini entries
    FILE(GLOB_RECURSE allSourceFiles CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.h")
    add_executable(IntellisenseProject EXCLUDE_FROM_ALL ${allSourceFiles}) # exclude this "fake" target from being build
    SetHeaderDirectories(ArduinoPackagesHeaderDirs ${ArduinoUserPackagesDir}) # read all directories from Arduino dir and subdirs where header files are located at
    SetHeaderDirectories(ArduinoLibrariesHeaderDirs ${ArduinoUserLibrariesDir})
    target_include_directories(IntellisenseProject PUBLIC ${ArduinoPackagesHeaderDirs} ${ArduinoLibrariesHeaderDirs} ${AllTargetsIncludeDirs})
endif()

这样我就不需要检查环境设置(gitignore arduino.ini)并且对 Arduino 依赖项具有完整的智能感知。

标签: visual-studiocmakearduino

解决方案


You can still use

include_directories(C:/Users/steven/AppData/Local/Arduino15/packages/)

ref: https://cmake.org/cmake/help/v3.20/command/include_directories.html

But I won't recommend it since your project is now dependent of your machine setup...

You should try to create a FindArduino.cmake our create a Toolchain file IMHO...


推荐阅读