jlc*_*lin 12 command-line cmake ctest
我正在使用CTest并希望在运行时将命令行参数传递给基础测试.我知道有很多方法可以将命令行参数硬编码到CMake/CTest脚本中,但我想在运行时指定命令行参数,并将这些参数通过CTest传递给基础测试.
这甚至可能吗?
我想出了一种方法来做到这一点(使用软件工程的基本定理)。这并不像我想要的那么简单,但就是这样。
首先,创建一个包含内容的文件${CMAKE_SOURCE_DIR}/cmake/RunTests.cmake
if(NOT DEFINED ENV{TESTS_ARGUMENTS})
set(ENV{TESTS_ARGUMENTS} "--default-arguments")
endif()
execute_process(COMMAND ${TEST_EXECUTABLE} $ENV{TESTS_ARGUMENTS} RESULT_VARIABLE result)
if(NOT "${result}" STREQUAL "0")
message(FATAL_ERROR "Test failed with return value '${result}'")
endif()
Run Code Online (Sandbox Code Playgroud)
然后,当您添加测试时,请使用
add_test(
NAME MyTest
COMMAND ${CMAKE_COMMAND} -DTEST_EXECUTABLE=$<TARGET_FILE:MyTest> -P ${CMAKE_SOURCE_DIR}/cmake/RunTests.cmake
)
Run Code Online (Sandbox Code Playgroud)
最后,您可以使用自定义参数运行测试
if(NOT DEFINED ENV{TESTS_ARGUMENTS})
set(ENV{TESTS_ARGUMENTS} "--default-arguments")
endif()
execute_process(COMMAND ${TEST_EXECUTABLE} $ENV{TESTS_ARGUMENTS} RESULT_VARIABLE result)
if(NOT "${result}" STREQUAL "0")
message(FATAL_ERROR "Test failed with return value '${result}'")
endif()
Run Code Online (Sandbox Code Playgroud)
请注意,如果您使用 bash,则可以将其简化为
add_test(
NAME MyTest
COMMAND ${CMAKE_COMMAND} -DTEST_EXECUTABLE=$<TARGET_FILE:MyTest> -P ${CMAKE_SOURCE_DIR}/cmake/RunTests.cmake
)
Run Code Online (Sandbox Code Playgroud)
这种方法存在一些问题,例如它忽略WILL_FAIL了测试的属性。我当然希望它可以像打电话一样简单ctest -- --custom-arguments,但是,正如石头所说,你不可能总是得到你想要的。
我不确定我完全理解你想要什么,但我仍然可以为你提供一种在运行时将参数传递给 CTest 中的测试的方法。
我给你举一个例子,使用 CTK(通用工具包,https://github.com/commontk/CTK):
在构建目录中(例如:CTK-build/CTK-build,它是超级构建),如果我运行:(“-V”表示详细,“-N”仅表示查看模式)
ctest -R ctkVTKDataSetArrayComboBoxTest1 -V -N
Run Code Online (Sandbox Code Playgroud)
我得到:
UpdateCTestConfiguration from : /CTK-build/CTK-build/DartConfiguration.tcl
Parse Config file:/CTK-build/CTK-build/DartConfiguration.tcl
Add coverage exclude regular expressions.
Add coverage exclude: /CMakeFiles/CMakeTmp/
Add coverage exclude: .*/moc_.*
Add coverage exclude: .*/ui_.*
Add coverage exclude: .*/Testing/.*
Add coverage exclude: .*/CMakeExternals/.*
Add coverage exclude: ./ctkPixmapIconEngine.*
Add coverage exclude: ./ctkIconEngine.*
UpdateCTestConfiguration from :/CTK-build/CTK-build/DartConfiguration.tcl
Parse Config file:/CTK-build/CTK-build/DartConfiguration.tcl
Test project /CTK-build/CTK-build
Constructing a list of tests
Done constructing a list of tests
178: Test command: /CTK-build/CTK-build/bin/CTKVisualizationVTKWidgetsCppTests "ctkVTKDataSetArrayComboBoxTest1"
Labels: CTKVisualizationVTKWidgets
Test #178: ctkVTKDataSetArrayComboBoxTest1
Total Tests: 1
Run Code Online (Sandbox Code Playgroud)
您可以将“测试命令”复制粘贴到终端中:
/CTK-build/CTK-build/bin/CTKVisualizationVTKWidgetsCppTests "ctkVTKDataSetArrayComboBoxTest1"
Run Code Online (Sandbox Code Playgroud)
并添加参数,例如用于交互式测试的“-I”:
/CTK-build/CTK-build/bin/CTKVisualizationVTKWidgetsCppTests "ctkVTKDataSetArrayComboBoxTest1" "-I"
Run Code Online (Sandbox Code Playgroud)
告诉我是否有帮助。
| 归档时间: |
|
| 查看次数: |
3084 次 |
| 最近记录: |