Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio Visual Studio作为CMake友好项目的编辑器_Visual Studio_Cmake_Editor - Fatal编程技术网

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

Visual studio Visual Studio作为CMake友好项目的编辑器,visual-studio,cmake,editor,Visual Studio,Cmake,Editor,我正试图使用VisualStudio作为一个编辑器来浏览GitHub上的大型开源项目。目录结构如下所示 /module1/include/ /module1/src/ /module2/include/ /module2/src/ ... 而构建由CMakeLists.txt维护 如果出于某种原因(例如,良好的IntelliSense支持),我坚持使用Visual Studio作为编辑器,那么最佳实践是什么 我尝试了“新建-现有代码中的项目”。它会产生丑陋的项目结构,其中所有*.cpp文件都在

我正试图使用VisualStudio作为一个编辑器来浏览GitHub上的大型开源项目。目录结构如下所示

/module1/include/
/module1/src/
/module2/include/
/module2/src/
...
而构建由CMakeLists.txt维护

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

  • 我尝试了“新建-现有代码中的项目”。它会产生丑陋的项目结构,其中所有*.cpp文件都在源文件过滤器下,而我仍然需要手动指定一组/*/include/目录

  • 我尝试实际使用CMake来生成visual studio解决方案。由于存在大量Linux依赖项,它立即失败,并出现许多严重错误


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

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

  • 使用商业产品,如或您可以,例如

  • >P>在源的根中创建一个新的空C++项目,并使用描述的技巧(但这似乎需要VisualStudio>2012的新版本)。p> 通过“显示所有文件”和“包含在项目中”,我能够获得所有源/头及其目录结构(使用Visual Studio 2013/2015进行测试)

  • 除了最基本的函数(如
    add_library()
    message()
    )之外,您可以模拟所有函数,并尝试获取原始
    CMake
    项目以生成Visual Studio解决方案。例如,您使用空的实现来创建您的应用程序:

    macro(add_custom_command)
    endmacro()
    
    macro(add_custom_target)
    endmacro()
    
    macro(set_property)
    endmacro()
    
    ...
    
    我承认这种方法有其局限性

  • 您正在编写一个特殊的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()
    
    只需将它放在某个地方(在我的示例中是源代码的根;但是您可以只更改
    \u src\u root\u path
    ),并生成一个包含由目录构成的源代码/头的Visual Studio项目(请参阅)


  • 你能补充一下你提到的“开源项目”的细节吗?使用CMake会收到哪些错误消息?一般来说,在不知道您的目标环境是什么的情况下:如果您想使用Visual Studio作为开发基于
    GNU
    工具链的项目的IDE,可以使用商业工具,如或。该项目包含大量运行Linux可执行文件的构建前和构建后bash脚本,所以我不相信我可以用VS来编译这个项目。我正在寻找一种方法来轻松创建启用IntelliSense的VS解决方案。这个项目非常庞大:有一百个子目录包含它们自己的include/和src/。在微软添加对CMake的特定支持之前,在这个阶段使用CLion更为现实。VS有一个附加组件,名为CMake Tools for Visual Studio,但其质量取决于您自己的测试。从CMake 3.8开始,该命令有一个
    参数,用于递归地将源文件映射到源组。
    foreach()
    可以简化为一行:
    source\u组(树${CMAKE\u CURRENT\u source\u DIR}文件${u source\u list})