我想用
execute_process
在子目录中执行CMake命令,并通过-D
选项传递一些缓存变量。如果该变量是字符串类型,则可行。但是,如果变量是一个列表,则似乎无法使用命令行中的传递列表的典型方法。我尝试了那个答案中列出的所有组合。我甚至试图使用"\\;"
或"\\\\;"
连接mylist
。然而,execute_process
似乎总是解压'-DVal2=a\\;b\\;c\\;'
或'-DVal2=a;b;c'
为-Dval2=a b c
。我该如何防止这种情况发生?只有-DVal2=a\\;b\\;c
有效,但这非常烦人。set(
mylist
a
b
c
)
set(
cmake_args
"-DVal1=abc"
"'-DVal2=${mylist}'" #does not work, the execute_process will unpack it into seperated args
)
execute_process(
COMMAND ${CMAKE_COMMAND} ${cmake_args} ${CMAKE_SOURCE_DIR}/subproject
OUTPUT_FILE ${CMAKE_BINARY_DIR}/config.log
ERROR_FILE ${CMAKE_BINARY_DIR}/config.log
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/subproject
RESULT_VARIABLE config_result
)