使用cmake有点麻烦。我正在一个奇怪的模式,我需要cmake调用外部cmake脚本来执行多个命令作为测试的一部分。我把它归结为这个例子。
awk
除了CMD = cmake之外,它适用于所有其他CMD设置。有什么想法吗?
将ARG作为“-E; sleep; 10”传递,但我的更高级项目看起来像:
test.cmake:
message("CMD: " ${CMD})
message("ARG: " ${ARG})
execute_process(COMMAND ${CMD} ${ARG}
RESULT_VARIABLE result
OUTPUT_VARIABLE output
)
message("RESULT: " ${result})
message("OUTPUT: " ${output})
mytest:
cmake -DCMD="cmake" -DARG="-E sleep 10" -V -P ./test.cmake
output:
CMD: cmake
ARG: -E sleep 10
CMake Error: The source directory "/Users/user/-E sleep 10" does not exist.
Specify --help for usage, or press the help button on the CMake GUI.
RESULT: 1
这失败了:/
贝
答案 0 :(得分:0)
要解决此问题,您必须使用其他列表分隔符。例如:na_rep
可以做到。
请注意,在较新版本的CMake中,使用这种分隔符更新列表也很容易:
^^
调用list(JOIN ${ARGS} "^^" ARG)
可以使用:
test.cmake
和cmake -DCMD="cmake" -DARG="-E^^sleep^^1" -V -P ./test.cmake
像这样:
test.cmake
输出看起来像这样:
message("ARG: ${ARG}")
string(REPLACE "^^" ";" ARGS ${ARG})
message("CMD: ${CMD}")
message("ARGS:")
foreach(argument IN LISTS ARGS)
message(STATUS " ${argument}")
endforeach()
execute_process(COMMAND ${CMD} ${ARGS}
RESULT_VARIABLE result
OUTPUT_VARIABLE output
)
message("RESULT: ${result}")
message("OUTPUT: ${output}")