CMake和CTest:如何使目标“夜间”实际构建测试

时间:2010-07-20 13:15:04

标签: dependencies cmake ctest

一个众所周知的问题是,执行make“test”并不像here那样构建测试。如所建议的,可以通过人工目标“检查”部分地解决该问题。我想知道当我称之为“夜晚制作”时我如何强制建立测试。

到目前为止我做了什么:

  add_custom_target(buildtests)
  add_custom_target(check COMMAND "ctest")
  add_dependencies(check buildtests)
  add_dependencies(Nightly buildtests)

  add_dependencies(buildtests Test1)
  ...
  add_dependencies(buildtests TestN)

现在“make check”构建一个运行测试,但“make Nightly”

  • 构建测试
  • 将回购更新为CTEST_NIGHTLY_START_TIME
  • 构建所有其他目标
  • 运行(现已过时)测试

2 个答案:

答案 0 :(得分:1)

如果你看一下

的输出
cmake --help-command add_custom_target

它提到了ALL参数,“如果指定了ALL选项,则表示应该将此目标添加到默认构建目标,以便每次都运行它”。您需要将此参数添加到自定义目标,并且Nightly目标运行make以构建默认构建目标中的所有内容。所以以下应该这样做,

add_custom_target(buildtests)

您的另一个选择是编写一个自定义CTest脚本,它可以为您的项目构建和测试提供更精细的控制。

答案 1 :(得分:1)

你是对的,这实际上是我自己的错误:

add_subdirectory(test EXCLUDE_FROM_ALL)

解决方案是将其更改为

if(LEAVE_TEST_IN_ALL_TARGET) 
  add_subdirectory(test) 
else() 
  add_subdirectory(test EXCLUDE_FROM_ALL) 
endif() 

然后致电

cmake ${SRC_DIR} -DLEAVE_TEST_IN_ALL_TARGET=ON make Nightly