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

D. *_*her 5 editor cmake visual-studio

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

/module1/include/
/module1/src/
/module2/include/
/module2/src/
...
Run Code Online (Sandbox Code Playgroud)

和构建由CMakeLists.txt维护.

如果我出于某种原因坚持使用Visual Studio作为编辑器(例如,良好的IntelliSense支持),那么最佳做法是什么?

  1. 我尝试了"New - Project from Existing Code".它产生丑陋的项目结构,其中所有*.cpp文件都在源文件过滤器下,而我仍然需要手动指定一堆/*/include /目录.

  2. 我试图实际使用CMake来制作视觉工作室解决方案.由于许多Linux依赖性,它立即失败了许多严重错误.

有没有办法创建一个具有适当的目录结构和包含路径的visual studio解决方案?

Flo*_*ian 5

我看到四种可能的方法:

  1. 使用Visual GDBWinGDB等商业产品,您可以将远程Linux项目导入Visual Studio.

  2. 您在源的根目录中创建一个新的空C++项目,并使用在Visual Studio 2012导入现有源文件中描述的技巧(但这似乎需要较新版本的Visual Studio> 2012).

    通过"显示所有文件"和"包含在项目中",我能够获得其目录结构的所有源/标头(使用Visual Studio 2013/2015测试).

  3. 您可以模拟最基本的(add_library()或者message())旁边的所有函数,并尝试获取原始CMake项目以生成Visual Studio解决方案.例如,您自己创建VSToolchain.cmakePreLoad.cmake使用空实现:

    macro(add_custom_command)
    endmacro()
    
    macro(add_custom_target)
    endmacro()
    
    macro(set_property)
    endmacro()
    
    ...
    
    Run Code Online (Sandbox Code Playgroud)

    我承认这种方法有其局限性.

  4. 您正在编写一个特殊的main 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()
    
    Run Code Online (Sandbox Code Playgroud)

    只需将它放在某处(在我的示例中为源的根目录;但您可以更改_src_root_path)并生成包含由目录构建的源/头的Visual Studio项目(请参阅如何使用cmake为嵌套子目录设置Visual Studio过滤器).