隐藏自动生成的 CTest 目标

Tim*_*mmm 7 c++ cmake ctest clion

我在 CLion 中使用 CMake 和 CTest。令人讨厌的是,CTest 生成了大量我不关心的目标:

  • 连续
  • 持续构建
  • 连续配置
  • 连续覆盖
  • 连续内存检查
  • 连续启动
  • 连续提交
  • 连续测试
  • 持续更新
  • 实验性的
  • 实验建造
  • 实验配置
  • 实验覆盖
  • 实验性内存检查
  • 实验开始
  • 实验提交
  • 实验测试
  • 实验更新
  • 每晚
  • 每晚构建
  • 夜间配置
  • 夜间报道
  • 夜间内存检查
  • 每晚开始
  • 每晚提交
  • 夜间测试
  • 每晚更新

这些都出现在 CLion 中。很烦人,因为我相信你会同意。有没有办法去除它们?我对任何解决方案持开放态度:

  1. 让 CTest 首先不要生成它们。
  2. 在 CTest 创建目标后删除目标。
  3. CLion 中的设置以隐藏它们。

Jua*_*eni 9

除非您使用 CDash,否则解决方案非常简单。

在你的 CMakefile 中替换

include(CTest)
Run Code Online (Sandbox Code Playgroud)

enable_testing()
Run Code Online (Sandbox Code Playgroud)


val*_*ano 6

黑客警告 - 下面的黑客依赖于内部实现细节 ( CTestTargets.cmake ),因此不能保证适用于任何 CMake 版本。

如果无法避免include(CTest),因为某些 CTest 功能是必需的,但无法通过使用enable_testing(),例如 Valgrind 集成,则可以使用以下 hack 来完全避免自动 CTest 目标的生成:

set_property(GLOBAL PROPERTY CTEST_TARGETS_ADDED 1) # hack to prevent CTest added targets
include (CTest)
Run Code Online (Sandbox Code Playgroud)

设置CTEST_TARGETS_ADDED1先于包含CTest将阻止生成自动 CTest 目标。

我已经使用 CMake 3.6 对此进行了测试,它应该可以通过 CMake 3.19.6(其中CTEST_TARGETS_ADDED仍在使用该宏)工作。


Tim*_*mmm 1

我不确定是否 100% 有效的一个可能的解决方案是转到 CLion 中的“运行”->“编辑配置...”,然后删除所有不需要的目标。

这似乎在重新加载 CMake 配置后仍然存在,并且make clean.