簡體   English   中英

如何在運行時在CTest中傳遞命令行參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM