从CTest脚本访问CMake缓存变量

时间:2012-08-24 11:40:54

标签: cmake ctest

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

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

2 个答案:

答案 0 :(得分:3)

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

然而,你可能会:

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

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

    如果脚本只执行设置变量值之类的简单操作,那么这只能实际可行。如果它执行任何CMake配置时间的事情,如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
    

答案 1 :(得分:0)

应通过命令CMakeLists.txtADD_TEST()文件中配置测试。然后,CTest脚本只需调用ctest_test()即可运行所有已配置的测试。通过这种方式,您可以访问缓存变量,而且您可以随时运行make test来运行测试。保存CTest脚本以进行夜间测试和/或仪表板提交。