我尝试使用Visual Studio作为编辑器来浏览GitHub上的大型开源项目。目录结构类似于
/module1/include/
/module1/src/
/module2/include/
/module2/src/
...
和构建由CMakeLists.txt维护。
如果由于某种原因我坚持使用Visual Studio作为编辑器(例如,良好的IntelliSense支持),那么最佳做法是什么?
我尝试了#34; New - 来自现有代码的项目"。它产生丑陋的项目结构,其中所有* .cpp文件都在源文件过滤器下,而我仍然需要手动指定一堆/ * / include /目录。
我尝试使用CMake来制作视觉工作室解决方案。由于许多Linux依赖性,它立即因许多严重错误而失败。
有没有办法用适当的目录结构创建可视化工作室解决方案并包含路径?
答案 0 :(得分:5)
我看到了四种可能的方法:
使用Visual GDB或WinGDB等商业产品,例如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项目(请参阅How to set Visual Studio Filters for nested sub directory using cmake)