source_group CMake命令不起作用

Edv*_*vin 5 cmake

我不明白我的CMakeLists.txt中的source_group命令.当我这样做时,它有效:

file(GLOB INPUT_HEAD    KeyBoard.h Mouse.h)
source_group("Header Files\\Input" FILES ${INPUT_HEAD})
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

file(GLOB SHADERS ../Shaders/*.txt)
source_group("Source Files\\Shaders" FILES ${SHADERS})
Run Code Online (Sandbox Code Playgroud)

关于如何解决这个问题的任何建议?(我已阅读此命令的文档,我不明白为什么这不起作用)

Phi*_*hil 12

您需要使用实际目标中的文件.例如,它们必须在add_libraryadd_executable声明中使用,然后它们将位于该项目中的文件夹中.另外,我使用''/''而不是\\分隔符.您可能还希望使用set_property(GLOBAL PROPERTY USE_FOLDERS ON)预定义的cmake项目进入他们自己的解决方案文件夹.

  • 除非是错误,否则在 source_group 调用中,“/”斜杠的行为与“\\”不同,至少在 Visual Studio 中是这样。使用“/”产生单个顶级过滤器,称为例如“顶/中/底”,而“\\”给出包含“中”的“顶”,“中”分层地包含“底”。 (2认同)

Sta*_*ine 5

自CMake 3.8起,有一个新命令可以根据相对于特定路径的文件夹结构自动过滤文件。

这是一个小示例,其中SRC_BUILD_FILES是包含要过滤的所有文件的集合。筛选是相对于某个基本路径发生的,在此示例中,该基本路径是使用CMAKE_CURRENT_SOURCE_DIR设置的,但可以是任何文件夹。可以将PREFIX名称(此处为Implementation)设置为您喜欢的名称,并将包含过滤后的设置。

    source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}"
         PREFIX "Implementation"
         FILES ${SRC_BUILD_FILES})
Run Code Online (Sandbox Code Playgroud)

因此,无需在cmake脚本中浏览或手动重新命名文件夹名称。