4

我的项目链接到带有 valgrind 抑制文件以及 CMake 脚本的第三方库。该脚本将抑制文件的位置存储在 CMake 缓存变量中。

我编写了一个 CTest 脚本,它在我的项目上运行连续测试并提交到仪表板。我想在内存检查阶段使用抑制文件。不幸的是,CTest 脚本似乎对 CMake 缓存一无所知。如何从我的 CTest 脚本访问 CMake 缓存变量?

4

2 回答 2

3

您不能从 ctest -S 脚本直接访问 CMake 缓存变量。

但是,您可以:

  1. 使用“include”在 ctest -S 脚本中包含第三方 CMake 脚本(在更新步骤之后,因此源代码树是最新的)
  2. 在配置步骤之后读取 CMakeCache.txt 文件以提取感兴趣的缓存变量
  3. 将代码添加到您的 CMakeLists.txt 文件中,以编写一个仅包含您要查找的信息的迷你脚本

对于 (1),代码类似于:

include(${CTEST_SOURCE_DIRECTORY}/path/to/3rdParty/script.cmake)

如果脚本只执行简单的操作,例如设置您可以引用的变量值,那么这实际上是可能的。如果它执行任何 CMake-configure-time 操作,例如 find_library 或 add_executable,那么您不应该这样做。

对于 (2):

file(STRINGS ${CTEST_BINARY_DIRECTORY}/CMakeCache.txt result
  REGEX "^CURSES_LIBRARY:FILEPATH=(.*)$")
message("result='${result}'")
string(REGEX REPLACE "^CURSES_LIBRARY:FILEPATH=(.*)$" "\\1"
  filename "${result}")
message("filename='${filename}'")

对于 (3):

在 CMakeLists.txt 文件中:

file(WRITE "${CMAKE_BINARY_DIR}/mini-script.cmake" "
  set(supp_file \"${supp_file_location}\")
")

在您的 ctest -S 脚本中,在 ctest_configure 调用之后:

include("${CTEST_BINARY_DIRECTORY}/mini-script.cmake")
message("supp_file='${supp_file}'")
# use supp_file as needed in the rest of your script
于 2012-08-24T14:41:28.687 回答
0

测试应该CMakeLists.txt通过命令在你的文件中配置ADD_TEST()。然后 CTest 脚本只需调用ctest_test()即可运行所有已配置的测试。通过这样做,您可以访问缓存变量,而且您可以make test在任何时候运行以运行测试。为每晚测试和/或仪表板提交保存 CTest 脚本。

于 2012-08-24T13:59:54.403 回答