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

时间:2015-09-18 06:27:58

标签: visual-studio cmake editor

我尝试使用Visual Studio作为编辑器来浏览GitHub上的大型开源项目。目录结构类似于

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

和构建由CMakeLists.txt维护。

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

  1. 我尝试了#34; New - 来自现有代码的项目"。它产生丑陋的项目结构,其中所有* .cpp文件都在源文件过滤器下,而我仍然需要手动指定一堆/ * / include /目录。

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

  3. 有没有办法用适当的目录结构创建可视化工作室解决方案并包含路径?

1 个答案:

答案 0 :(得分:5)

我看到了四种可能的方法:

  1. 使用Visual GDBWinGDB等商业产品,例如import remote Linux projects to Visual Studio

  2. 您在源的根目录下创建一个新的空C ++项目,并使用Importing an existing source file in Visual Studio 2012中描述的技巧(但这似乎需要较新版本的Visual Studio> 2012)。

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

  3. 您可以模拟最基本的功能(如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()
    
    ...
    

    我承认这种做法有其局限性。

  4. 您正在编写一个特殊的主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项目(请参阅How to set Visual Studio Filters for nested sub directory using cmake