如何在 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 ExplorerHiddenTargetsAppTools 文件夹中。您可以折叠包含您不想看到的目标的文件夹,或完全隐藏文件夹(通过右键单击文件夹并选择隐藏文件夹)。目标仍然可用(必要时会构建),只是在解决方案资源管理器中不可见。您可以通过右键单击解决方案并选择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 中隐藏某些目标?的主要内容,如果未能解决你的问题,请参考以下文章

防止 cmake 运行 cpack

如何在 Visual Studio 和 CMake 中使用 clang-tidy?

用于某些目标的 Cppcheck 与 CMake 集成

如何在 CMake 中正确创建目标之间的依赖关系?

如何在cmake 2.8.12中删除每个目标的定义

如何在 CMake 中构建过程后复制目标的所有运行时依赖项?