2

这是一个众所周知的问题,即执行 make "test" 不会构建这里讨论的测试。如建议的那样,可以通过人工目标“检查”部分解决该问题。我想知道当我调用“make Nightly”时如何强制构建测试。

到目前为止我所做的:

  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”

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

2 回答 2

2

你是对的,这实际上是我自己的错打电话:

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
于 2010-08-18T17:38:09.953 回答
1

如果你看一下输出,

cmake --help-command add_custom_target

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

add_custom_target(构建测试)

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

于 2010-08-18T05:10:53.647 回答