是否可以在Visual Studio中将文件添加到CMake生成的解决方案文件夹中

Is it possible to add files to a CMake generated solution folder in Visual Studio?

本文关键字:CMake 文件夹 解决方案 添加 文件 Visual Studio 是否      更新时间:2023-10-16

这个问题或多或少是这个问题的热身:

如何让cmake将文件添加到msvcs解决方案树

它从来没有得到一个有效的答案,所以我想让它稍微不同一点:

是否可以使用cmake 2.8.3中引入的cmake解决方案文件夹将文件直接添加到vs解决方案中?我想做相当于VS->Solution->Add->Existing Item的cmake。因此,我的文件将出现在属于解决方案而不属于项目的文件夹中。

我发现了解决方案文件夹如何用于将目标分组到文件夹中的示例,代码如下:

set_property( GLOBAL PROPERTY USE_FOLDERS ON)
set_property(TARGET ${TARGET_NAME} PROPERTY FOLDER "Test") 

那么,我可以在文件夹中添加一个文件而不是目标吗?

这可能是不可能的。

CMake将其资产组织为项目目标。该项目对应于Visual Studio的解决方案文件,而每个目标都将在各自的解决方案中生成一个Visual Studio项目。

现在的问题是,CMake不允许将文件添加到CMake项目中。事实上,CMake项目只不过是目标的集合,几乎不提供任何自定义选项。因此,您提到的USE_FOLDERS选项只能用于对解决方案中的VS项目进行分组,而不能用于对单个文件进行分组。

最接近您要求的可能是添加一个保存文件的自定义目标。然而,这仍然会在解决方案中生成一个VS项目(除了文件之外,它还包含一堆其他东西),而不是一个普通的文件夹。

如果我正确理解这个问题,我想我知道怎么做:

set(FILES_TO_ADD
    file1
    file2
    file3)
source_group("Group Name" FILES ${FILES_TO_ADD})

source_group命令在Visual Studio项目中创建文件夹。

这个答案只是在接受的答案中为ComicansMS提出的"自定义目标"解决方案添加了一个示例。这是我当前用于添加全局文件的内容。

set( SOLUTION_FILES 
    ${CMAKE_SOURCE_DIR}/CMakeLists.txt               # root CMakeLists file
    ${CMAKE_SOURCE_DIR}/cmake/macros.cmake           # cmake functions
    ${CMAKE_SOURCE_DIR}/CMakeInCodeDefinitions.h.in  # imported cmake variables
    # etc...
)
add_custom_target( GlobalFiles SOURCES ${SOLUTION_FILES})