Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cmake ctest测试后删除文件_Cmake_Ctest - Fatal编程技术网

cmake ctest测试后删除文件

cmake ctest测试后删除文件,cmake,ctest,Cmake,Ctest,我有一个cmake项目,它运行了许多测试,例如 add_test(test_title executable arg1 arg2) 运行这些测试时,会生成许多文件。 一旦测试运行,我想删除其中一个生成的文件,即 delete(${arg1}.txt) or delete(${arg2}.pdf) 如果您能提供一个示例,我们将不胜感激。您可以使用cmake脚本包装实际的测试命令。在您的情况下,它可以是: add_test(NAME test_title COMMAND ${CM

我有一个cmake项目,它运行了许多测试,例如

add_test(test_title executable arg1 arg2)
运行这些测试时,会生成许多文件。 一旦测试运行,我想删除其中一个生成的文件,即

delete(${arg1}.txt)

    or

delete(${arg2}.pdf)
如果您能提供一个示例,我们将不胜感激。

您可以使用cmake脚本包装实际的测试命令。在您的情况下,它可以是:

add_test(NAME test_title
  COMMAND ${CMAKE_COMMAND}
    -Darg1=${arg1}
    -Darg2=${arg2}
    -P ${CMAKE_CURRENT_SOURCE_DIR}/runtest.cmake
)
包装器runtest.cmake可以是:

execute_process(COMMAND executable ${arg1} ${arg2}
  TIMEOUT 1000 # it should be less than in add_test
  RESULT_VARIABLE status
)
file(REMOVE ${arg1}.txt)
file(REMOVE ${arg2}.txt)
if(status)
  MESSAGE(FATAL_ERROR "Test executing status: ${status}")
endif()
如图所示,您可以使用cmake脚本包装实际的测试命令。在您的情况下,它可以是:

add_test(NAME test_title
  COMMAND ${CMAKE_COMMAND}
    -Darg1=${arg1}
    -Darg2=${arg2}
    -P ${CMAKE_CURRENT_SOURCE_DIR}/runtest.cmake
)
包装器runtest.cmake可以是:

execute_process(COMMAND executable ${arg1} ${arg2}
  TIMEOUT 1000 # it should be less than in add_test
  RESULT_VARIABLE status
)
file(REMOVE ${arg1}.txt)
file(REMOVE ${arg2}.txt)
if(status)
  MESSAGE(FATAL_ERROR "Test executing status: ${status}")
endif()

我不确定在提问时这个选项是否可用,但我使用了一个大致如下的技巧:

  • 定义测试:测试标题
  • 定义另一个测试:测试\u标题\u删除\u文件
    • 在测试标题上(因此将首先运行测试标题)
    • 要删除以使其存在的文件(显式优于隐式)
    • 调用
      cmake-E remove
这样你会有一个假额外的测试,但至少它会告诉你是否有任何错误

我的实施:

add_test(NAME test_title_remove_file
    COMMAND ${CMAKE_COMMAND} -E remove
        ${arg1}
        ${CMAKE_CURRENT_BINARY_DIR}/${arg2}
)

set_tests_properties(test_title_remove_xmls PROPERTIES
    DEPENDS test_title ## note it is your test_title
    REQUIRED_FILES 
    ${arg1};
    ${CMAKE_CURRENT_BINARY_DIR}/${arg2};
)

我不确定在提问时这个选项是否可用,但我使用了一个大致如下的技巧:

  • 定义测试:测试标题
  • 定义另一个测试:测试\u标题\u删除\u文件
    • 在测试标题上(因此将首先运行测试标题)
    • 要删除以使其存在的文件(显式优于隐式)
    • 调用
      cmake-E remove
这样你会有一个假额外的测试,但至少它会告诉你是否有任何错误

我的实施:

add_test(NAME test_title_remove_file
    COMMAND ${CMAKE_COMMAND} -E remove
        ${arg1}
        ${CMAKE_CURRENT_BINARY_DIR}/${arg2}
)

set_tests_properties(test_title_remove_xmls PROPERTIES
    DEPENDS test_title ## note it is your test_title
    REQUIRED_FILES 
    ${arg1};
    ${CMAKE_CURRENT_BINARY_DIR}/${arg2};
)

您是否考虑过调整您的测试以写入临时文件?嗨,Torbjörn,谢谢您的回复。创建文件的不是cmake测试,而是可执行文件,我假设cmake有某种测试后清理方法可用。当前,当测试运行时,会创建大量数据,在每次测试后删除中间文件将是有益的。测试可执行文件本身应调整为在测试环境中运行时写入临时文件,即,生成文件的测试函数的输出路径应可配置。这与一般的测试无关,而是库/程序的一般设计。您是否考虑过调整您的测试以写入tempfiles?嗨,Torbjörn,谢谢您的回复。创建文件的不是cmake测试,而是可执行文件,我假设cmake有某种测试后清理方法可用。当前,当测试运行时,会创建大量数据,在每次测试后删除中间文件将是有益的。测试可执行文件本身应调整为在测试环境中运行时写入临时文件,即,生成文件的测试函数的输出路径应可配置。这与一般的测试无关,而是库/程序的一般设计。