Visual Studio 2017与CMake的文件夹结构

13

我正在使用C++和Qt开发一个新项目,并使用CMake生成解决方案。

这个项目很大,在Visual Studio 2017和QtCreator中都可以正常工作。大多数人使用Ninja生成构建解决方案,并将构建导入到QtCreator中。但是我更喜欢使用VS IDE。

问题在于,QtCreator的“解决方案浏览器”保留了文件夹结构,但是在VS中,所有项目(库和dll)都从解决方案(根目录)悬挂,因此我会失去一些有价值的信息。

我对CMake还比较新,我想知道是否有一种方法可以生成与源代码具有相同文件夹结构的VS解决方案,而不影响QtCreator解决方案。


1
可能是重复的问题,因为Stackoverflow上有其他类似的问题。如果您希望解决方案资源管理器保持与文件系统本身相同的文件夹结构,则CMake可以通过GLOB_RECURSE来支持。请参见此帖子 - Kevin
我不认为这就是我正在寻找的。 - Javier De Pedro
1
“我想知道是否有一种方法可以生成与源代码具有相同文件夹结构的VS解决方案。” - 我链接的帖子确实提出了这个问题的解决方案。但如果这不是你要寻找的,那么就不清楚你在问什么了。你能否请澄清你的问题? - Kevin
3
你所提供的链接解释了如何递归扫描文件夹以获取项目中源文件列表。这并不意味着VS将以与它们在文件系统中放置的方式相同的方式显示项目列表。我的项目已经获得了必要的源文件,我不需要递归查找它们... 我只是想让VS以相同的结构显示项目。 - Javier De Pedro
1
感谢您的纠正,我不是以英语为母语的人。 - Javier De Pedro
1个回答

26

CMake支持将您的Visual Studio解决方案资源管理器中的项目组织到文件夹中,因此您可以将文件夹命名为反映系统上的目录结构。例如,如果您的项目组织方式如下:

Utilities/LibraryA
Utilities/LibraryB
Executables/tools/ParserExecutable
你可以使用set_target_properties命令,搭配FOLDER属性来为VS Solution Explorer中每个项目指定包含文件夹:

Utilities/CMakeLists.txt:

set_target_properties(LibraryA PROPERTIES FOLDER "Utilities")
set_target_properties(LibraryB PROPERTIES FOLDER "Utilities")

可执行文件/工具/CMakeLists.txt:

set_target_properties(ParserExecutable PROPERTIES FOLDER "Executables/tools")

您可以尝试使用CMAKE_CURRENT_SOURCE_DIR来自动化此过程,而不是明确命名文件夹,但先从简单的情况开始!

此外,请确保将此添加到您的顶级CMake中,以启用VS文件夹管理您的项目。

set_property(GLOBAL PROPERTY USE_FOLDERS ON)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接