[英]How to pass command-line arguments in CTest at runtime
我正在使用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()
然后,當您添加測試時,請使用
add_test(
NAME MyTest
COMMAND ${CMAKE_COMMAND} -DTEST_EXECUTABLE=$<TARGET_FILE:MyTest> -P ${CMAKE_SOURCE_DIR}/cmake/RunTests.cmake
)
最后,您可以使用自定義參數運行測試
cmake -E env TESTS_ARGUMENTS="--custom-arguments" ctest
請注意,如果您使用bash,則可以將其簡化為
TESTS_ARGUMENTS="--custom-arguments" ctest
這種方法存在一些問題,例如它忽略了測試的WILL_FAIL
屬性。 當然我希望它可以像調用ctest -- --custom-arguments
一樣簡單ctest -- --custom-arguments
,但是,正如Stones所說, 你不能總是得到你想要的東西 。
我不確定我完全理解你想要什么,但我仍然可以給你一種方法在運行時將參數傳遞給CTest中的測試。
我將舉例說明CTK(Common Toolkit, https : //github.com/commontk/CTK ):
在build dir中(例如:CTK-build / CTK-build,它是一個超級構建),如果我運行:('-V'代表詳細,' - '代表視圖模式)
ctest -R ctkVTKDataSetArrayComboBoxTest1 -V -N
我明白了:
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
您可以在終端中復制粘貼“測試命令”:
/CTK-build/CTK-build/bin/CTKVisualizationVTKWidgetsCppTests "ctkVTKDataSetArrayComboBoxTest1"
並添加參數,例如“-I”用於交互式測試:
/CTK-build/CTK-build/bin/CTKVisualizationVTKWidgetsCppTests "ctkVTKDataSetArrayComboBoxTest1" "-I"
告訴我它是否有幫助。
matthieu的回答給了我讓它為我工作的線索。
對於我的代碼,我做了以下事情:
輸入命令ctest -V -R TestMembraneCellCrypt -N
以獲取輸出:
...
488: Test command: path/to/ctest/executable/TestMembraneCellCrypt
Labels: Continuous_project_ChasteMembrane
Test #488: TestMembraneCellCrypt
...
然后我復制了Test command
並在那里提供了參數:
path/to/ctest/executable/TestMembraneCellCrypt -e 2 -em 5 -ct 10
我會注意到我正在使用的包( Chaste )非常大,所以可能會發生一些我不知道的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.