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