Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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
Command line 如何在运行时在CTest中传递命令行参数_Command Line_Cmake_Ctest - Fatal编程技术网

Command line 如何在运行时在CTest中传递命令行参数

Command line 如何在运行时在CTest中传递命令行参数,command-line,cmake,ctest,Command Line,Cmake,Ctest,我正在使用CTest,希望在运行时将命令行参数传递给底层测试。我知道有很多方法可以将命令行参数硬编码到CMake/CTest脚本中,但我想在运行时指定命令行参数,并将这些参数通过CTest传递到底层测试 这可能吗?我不确定我是否完全理解您想要什么,但我仍然可以为您提供一种在运行时将参数传递给CTest中的测试的方法 我将用CTK(通用工具包)为您提供一个示例: 在build dir中(例如:CTK build/CTK build,它是一个超级构建),如果我运行:('-V'表示详细,而'-N'仅表

我正在使用CTest,希望在运行时将命令行参数传递给底层测试。我知道有很多方法可以将命令行参数硬编码到CMake/CTest脚本中,但我想在运行时指定命令行参数,并将这些参数通过CTest传递到底层测试


这可能吗?

我不确定我是否完全理解您想要什么,但我仍然可以为您提供一种在运行时将参数传递给CTest中的测试的方法

我将用CTK(通用工具包)为您提供一个示例:

在build dir中(例如:CTK build/CTK build,它是一个超级构建),如果我运行:('-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"

告诉我它是否有用。

马修的回答给了我线索,让它为我工作

对于我的代码,我执行了以下操作:

键入命令
ctest-V-R TestMembraneCellCrypt-N
以获取输出:

...
488: Test command: path/to/ctest/executable/TestMembraneCellCrypt
Labels: Continuous_project_ChasteMembrane
  Test #488: TestMembraneCellCrypt
...
然后我复制了
Test命令
,并在那里提供了参数:

path/to/ctest/executable/TestMembraneCellCrypt -e 2 -em 5 -ct 10

我会注意到,我使用的包()相当大,因此可能有一些事情我不知道。

我已经找到了一种方法(使用)。这不是我想要的那么简单,但它在这里

首先,创建一个包含内容的文件${CMAKE\u SOURCE\u 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
)
注意,如果使用bash,可以将其简化为

TESTS_ARGUMENTS=“--custom ARGUMENTS”ctest

这种方法存在一些问题,例如,它忽略了测试的
WILL\u FAIL
属性。当然,我希望它可以像调用
ctest--custom arguments
那样简单,但是,正如前面所说,.

你最终找到了解决方案吗?@simon不,我没有在这里对CMake做过特性需求测试:我在这里对CMake做了特性需求测试:但是,它没有在与ctest完全相同的环境中执行测试,例如,是否必须设置环境变量取决于CMakeLists.txt的编写方式。在我们的项目中,test命令还包含设置环境变量。这是专门为了使ctest-N更有用而做的。
add_test(
    NAME MyTest
    COMMAND ${CMAKE_COMMAND} -DTEST_EXECUTABLE=$<TARGET_FILE:MyTest> -P ${CMAKE_SOURCE_DIR}/cmake/RunTests.cmake
)