如何在 CMake 中隐藏某些目标?
Posted
技术标签:
【中文标题】如何在 CMake 中隐藏某些目标?【英文标题】:How to hide certain targets in CMake? 【发布时间】:2010-11-02 17:11:47 【问题描述】:我有一个作为基于 CMake 的项目的一部分构建的库。这个库有很多目标,我不想看到它们出现在我的目标列表中(在 Visual Studio 或 QtCreator 下)。有没有办法让我将此库构建为我的项目构建的一部分(有点像依赖构建)但看不到这个库的可用目标?
【问题讨论】:
有一个FOLDER
property,我希望它至少能让我将不重要的目标分流到misc
文件夹。不幸的是,它似乎对 Qt Creator 4.3.0 没有任何作用。
【参考方案1】:
目前几乎没有明确支持在这些 IDE 中隐藏特定目标。 CMake(尚)不支持显示/隐藏目标选项。但是,有一种方法可以避免在 Visual Studio 中滚动浏览长长的目标列表。您可以使用 IDE 文件夹分组您的目标。 CMake 通过在特定目标上设置 FOLDER
属性来支持这一点。
首先,通过将此行添加到您的*** CMakeLists.txt 文件中来告诉 CMake 启用 IDE 文件夹:
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
然后,通过设置FOLDER
属性将目标组织到文件夹中。
# Put these targets in the 'HiddenTargets' folder in the IDE.
set_target_properties(SillyLib1 SillyLib2 DontCareLib1 PROPERTIES FOLDER HiddenTargets)
# Put these targets in the 'AppTools' folder in the IDE.
set_target_properties(WriterLib1 ReaderLib1 AwesomeLib42 PROPERTIES FOLDER AppTools)
现在,您的 CMake 目标将放置在 Visual Studio Solution Explorer 的 HiddenTargets
和 AppTools
文件夹中。您可以折叠包含您不想看到的目标的文件夹,或完全隐藏文件夹(通过右键单击文件夹并选择隐藏文件夹)。目标仍然可用(必要时会构建),只是在解决方案资源管理器中不可见。您可以通过右键单击解决方案并选择Unhide Folders来取消隐藏隐藏文件夹。
据我所知,Qt Creator 不支持这一点。然而,在 2017 年,他们处理了一个类似的 request 来隐藏 CMake 目标。总的来说,这个错误修复(在 Qt Creator 4.4.0 和更高版本中实现)清理了被污染的目标视图(删除了 Source Directory 列表),并改进了他们的 Hide Generated Files 和 隐藏空文件夹 功能,让用户可以更好地控制项目列表中显示/隐藏的内容。
【讨论】:
【参考方案2】:我的解决方案是让 CMake 执行一个 shell 命令来构建我需要的依赖项,而不是调用 add_subdirectory。它并不优雅,但胜过所有那些不需要的目标造成的视觉污染。
【讨论】:
【参考方案3】:你知道ExternalProject_Add 命令吗?它允许您描述您想要构建的库的构建(以及下载、修补、安装……)步骤,作为 你自己的项目。使用此命令会将您的库显示为 make/Visual Studio/QtCreator 中的单个目标。
【讨论】:
以上是关于如何在 CMake 中隐藏某些目标?的主要内容,如果未能解决你的问题,请参考以下文章