cmake - 支持Visual Studio过滤器

时间:2017-05-17 09:11:23

标签: c++ visual-studio visual-studio-2017

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

一个例子,现在我使用ZLIB库,它看起来像一个项目,我使用以下内容:

add_subdirectory(zlib)

要添加此类过滤器,我尝试以下操作:

add_subdirectory(zlib)
FILE(GLOB_RECURSE ZLIB_SOURCE "zlib/*")
SOURCE_GROUP("THIRDPARTY" FILES ${ZLIB_SOURCE})

在这个例子中,我希望将" zlib"投射到" THIRDPARTY"过滤

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

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

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

  1. 分隔多个项目并将它们放入顶层的文件夹中 执行以下操作:

    • 将它放在主CMakeLists.txt的顶部 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
    • 在定义目标后添加此额外位 add_executable(MyLib .....) set_target_properties(MyLib PROPERTIES FOLDER "Libraries");

      您的项目资源管理器将如下所示:

      enter image description here
      这些家伙可以归功于: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}")
  3. 上述内容适用于CMake 3.6和Visual Studio 2015,因此它也适用于VS2017和Cmake 3.8。
    当完成项目的所有文件时,它看起来像这样:

    project explorer

    既然你正在开发VS,我认为另一个暗示是非常有用的: 您可以通过以下命令定义VS的启动项目。这样,在用CMake重建项目后,你不必改变VS中的任何东西 set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ProjectName)