将ARGN传递给CMake的add_test()中的自定义脚本

时间:2015-07-11 10:38:11

标签: unit-testing cmake ctest

我想在单元测试中将ARGN传递给自定义run_test.cmake。 我在CMake脚本中做的是:

# 1:
message("ARGN: ${ARGN}")
add_test(NAME ${_category}/${_test_name}_mpi${_nmpi}
 WORKING_DIRECTORY "${_target_dir}"
 COMMAND "${CMAKE_COMMAND}"
 -DNMPI=${_nmpi}
 -DTEST_PROG=${_target_dir}/${_target_exec}
 -DTEST_ARGN=${ARGN}
 -Doutput_blessed=${CMAKE_SOURCE_DIR}/unit_tests/${_category}/${_test_name}.output
 -Doutput_test=${_target_dir}/output
 -P ${CMAKE_SOURCE_DIR}/unit_tests/run_test.cmake
 )  

,其中

  # 2 (part of run_test.cmake):
  message("TEST_ARGN: ${TEST_ARGN}")
  # run the executable
  execute_process(COMMAND mpirun -np ${NMPI} ${TEST_PROG} ${TEST_ARGN}
            RESULT_VARIABLE HAD_ERROR
            OUTPUT_VARIABLE output
            ERROR_VARIABLE output)

问题是(1)在配置消息打印ARGN: ARG1;ARG2;ARG3期间获取所有参数,而(2)在运行时消息打印TEST_ARGN: ARG1期间仅获取第一个参数。

这绝对是我对Cmake缺乏了解,但我很想知道我做错了什么。

1 个答案:

答案 0 :(得分:1)

$ {ARGN}包含';' character(在列表中分隔元素),你应该将它的所有用法放入"

"-DTEST_ARGN=${ARGN}"

否则CMake会将其解释为命令的几个参数:

-DTEST_ARGN=ARG1 ARG2 ARG3