在 CMake 的 add_test() 中将 ARGN 传递给自定义脚本
pass ARGN to custom script in add_test() of CMake
我想在单元测试中将 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) 在 运行 时间消息打印 [=15] 期间仅获取第一个参数=].
这绝对是我对Cmake缺乏了解,但我很想知道我做错了什么。
因为 ${ARGN} 包含“;”字符(分隔列表中的元素),你应该将它的所有用法放入 "
:
"-DTEST_ARGN=${ARGN}"
否则 CMake 将其解释为命令的几个参数:
-DTEST_ARGN=ARG1 ARG2 ARG3
我想在单元测试中将 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) 在 运行 时间消息打印 [=15] 期间仅获取第一个参数=].
这绝对是我对Cmake缺乏了解,但我很想知道我做错了什么。
因为 ${ARGN} 包含“;”字符(分隔列表中的元素),你应该将它的所有用法放入 "
:
"-DTEST_ARGN=${ARGN}"
否则 CMake 将其解释为命令的几个参数:
-DTEST_ARGN=ARG1 ARG2 ARG3