cmake - 支持 Visual Studio 过滤器
Posted
技术标签:
【中文标题】cmake - 支持 Visual Studio 过滤器【英文标题】:cmake - support of Visual Studio filters 【发布时间】:2017-05-17 09:11:23 【问题描述】:我有一个 cmake 文件,它生成一个包含多个子项目的解决方案,但我希望有一个“过滤器”(VS 特定功能)将我所有的第三方库组合在一起。
一个例子,现在我使用 ZLIB 库,它显示为一个项目,我使用以下内容:
add_subdirectory(zlib)
要添加这样的过滤器,我尝试了以下方法:
add_subdirectory(zlib)
FILE(GLOB_RECURSE ZLIB_SOURCE "zlib/*")
SOURCE_GROUP("THIRDPARTY" FILES $ZLIB_SOURCE)
在本例中,我希望将“zlib”项目放入“第三方”过滤器中。
但我的解决方案没有任何改变!我使用 VS2017 和 cmake 3.8
有什么想法吗?
【问题讨论】:
【参考方案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
要在一个项目中分离多个源文件,您可以执行以下操作:
收集一个模块的所有文件: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)
【讨论】:
非常感谢,我了解到您使用 'source_group' 在项目中创建过滤器,但我的上下文不同。我需要将几个项目(我不能更改他们的 cmake)放在一个新的过滤器中!你看到了吗? 好的,我看到我的帖子对您没有太大帮助。但不幸的是,我并不真正了解您想要达到的目标。是否要在第一级添加过滤器(直接在解决方案下/与项目相同的级别)?或者这个新过滤器会出现在哪里? 你说得对,我需要在第一级,在解决方案下放置一个过滤器。那么这个过滤器将包含几个项目! 嗯,好的。找到并测试了一种快速的方法来做到这一点并将其添加到答案中。以上是关于cmake - 支持 Visual Studio 过滤器的主要内容,如果未能解决你的问题,请参考以下文章
防止控制台窗口在 Visual Studio 2017 cmake 项目中关闭
没有对 Visual Studio 12 2013 的 DOTNET 绑定支持
将 CMake.txt 转换为 .vcxproj 文件 C++ Visual Studio 项目
CMake 库目标并不总是出现在 Visual Studio 2017 的启动项下拉列表中