cmake-支持Visual Studio过滤器

CDZ*_*CDZ 2 c++ visual-studio visual-studio-2017

我有一个cmake文件,该文件可以生成包含多个子项目的解决方案,但我希望有一个“过滤器”(VS特定功能)将所有第三方库组合在一起。

一个例子,现在我使用ZLIB库,它作为一个项目出现,我使用以下代码:

add_subdirectory(zlib)
Run Code Online (Sandbox Code Playgroud)

要添加这样的过滤器,我可以尝试以下方法:

add_subdirectory(zlib)
FILE(GLOB_RECURSE ZLIB_SOURCE "zlib/*")
SOURCE_GROUP("THIRDPARTY" FILES ${ZLIB_SOURCE})
Run Code Online (Sandbox Code Playgroud)

在此示例中,我希望将“ zlib”项目放入“ THIRDPARTY”过滤器中。

但是我的解决方案没有任何改变!我使用VS2017和cmake 3.8

任何的想法 ?

sim*_*mue 5

在解决方案资源管理器中,有两种方法可以分离您自己的应用程序代码和第三方代码。

  1. 分离多个项目,并将它们放入顶层文件夹中。
    请执行下列操作:

    • 将此放在您的主要CMakeLists.txt顶部
      set_property(GLOBAL PROPERTY USE_FOLDERS ON)
    • 在定义了目标之后,添加以下额外内容:
      add_executable(MyLib .....) set_target_properties(MyLib PROPERTIES FOLDER "Libraries");

      项目浏览器将如下所示:

      在此处输入图片说明
      归功于这些人:http : //cmake.3232098.n2.nabble.com/Solution-folders-td6043529.html

  2. 要在一个项目中分离多个源文件,您可以执行以下操作:

    • 使用以下命令收集模块的所有文件:
      set(VARIABLE_NAME src/module/fileName1.cpp src/module/fileName2.cpp)
    • 使它出现在过滤器中:
      source_group("Source Files\\module" FILES ${VARIABLE_NAME})
    • 将所有先前生成的过滤器分组在一起:
      set(SOURCE_FILES "${VARIABLE_NAME}")
    • 最终使所有内容都出现在项目浏览器中:
      add_executable(projectName "${SOURCE_FILES}")

以上内容对我来说适用于CMake 3.6和Visual Studio 2015,因此它也应与VS2017和Cmake 3.8一起使用。
项目的所有文件完成后,外观如下所示:

项目资源管理器

由于您使用VS进行开发,因此我认为这是另一个有用的提示:您可以通过以下命令定义VS的启动项目。这样,您在使用CMake重新制作项目后,无需在VS中进行任何更改。
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ProjectName)