gpt4 book ai didi

visual-studio - Visual Studio 作为 CMake 友好项目的编辑器

转载 作者:行者123 更新时间:2023-12-04 19:03:01 26 4
gpt4 key购买 nike

我正在尝试使用 Visual Studio 作为编辑器来浏览 GitHub 上的大型开源项目。目录结构看起来像

/module1/include/
/module1/src/
/module2/include/
/module2/src/
...

构建由 CMakeLists.txt 维护。

如果我出于某种原因坚持使用 Visual Studio 作为编辑器(例如,良好的 IntelliSense 支持),最佳实践是什么?
  • 我尝试了“新建 - 来自现有代码的项目”。它产生了丑陋的项目结构,其中所有 *.cpp 文件都在源文件过滤器下,而我仍然需要手动指定一堆/*/include/目录。
  • 我尝试实际使用 CMake 来生成 Visual Studio 解决方案。由于大量的 Linux 依赖关系,它立即失败并出现了许多严重错误。

  • 有什么方法可以创建具有适当目录结构并包含路径的 Visual Studio 解决方案?

    最佳答案

    我看到四种可能的方法:

  • 使用商业产品,如 Visual GDBWinGDB你可以例如import remote Linux projects to Visual Studio .
  • 您在源代码的根目录下创建一个新的空 C++ 项目,并使用 Importing an existing source file in Visual Studio 2012 中描述的技巧。 (但这似乎需要较新版本的 Visual Studio > 2012)。

    通过“显示所有文件”和“包含在项目中”,我能够获取所有具有目录结构的源/头文件(使用 Visual Studio 2013/2015 测试)。
  • 您可以模拟除最基本的函数(如 add_library()message() )之外的所有函数并尝试获得原始的 CMake项目以生成 Visual Studio 解决方案。例如。你做你的 own VSToolchain.cmake or PreLoad.cmake 空实现:
    macro(add_custom_command)
    endmacro()

    macro(add_custom_target)
    endmacro()

    macro(set_property)
    endmacro()

    ...

    我承认这种方法有其局限性。
  • 你正在写一个特别的主 CMakeLists.txt将所有源/标题收集到一个新的解决方案中,例如:
    cmake_minimum_required(VERSION 2.8)

    project(MyProject C CXX)

    set(_src_root_path "${CMAKE_CURRENT_SOURCE_DIR}")
    file(
    GLOB_RECURSE _source_list
    LIST_DIRECTORIES false
    RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
    "${_src_root_path}/*.c*"
    "${_src_root_path}/*.h*"
    )

    add_library(MySources ${_source_list})

    foreach(_source IN ITEMS ${_source_list})
    get_filename_component(_source_path "${_source}" PATH)
    string(REPLACE "/" "\\" _source_path_msvc "${_source_path}")
    source_group("${_source_path_msvc}" FILES "${_source}")
    endforeach()

    只需将它放在某处(在我的示例中是源的根目录;但您可以更改 _src_root_path )并生成一个 Visual Studio 项目,其中包含按目录结构化的源/ header (请参阅 How to set Visual Studio Filters for nested sub directory using cmake )。
  • 关于visual-studio - Visual Studio 作为 CMake 友好项目的编辑器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32645217/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com