我的项目链接到第三方库,该库附带了valgrind抑制文件以及CMake脚本。该脚本将抑制文件的位置存储在CMake缓存变量中。
我写了一个CTest脚本,它对我的项目运行连续测试并提交到仪表板。我想在内存检查阶段使用抑制文件。不幸的是,CTest脚本似乎对CMake缓存一无所知。如何从CTest脚本访问CMake缓存变量?
答案 0 :(得分:3)
您无法直接从ctest -S脚本访问CMake缓存变量。
然而,你可能会:
对于(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.txt
在ADD_TEST()
文件中配置测试。然后,CTest脚本只需调用ctest_test()
即可运行所有已配置的测试。通过这种方式,您可以访问缓存变量,而且您可以随时运行make test
来运行测试。保存CTest脚本以进行夜间测试和/或仪表板提交。