Я хочу выполнить команду CMake в подкаталоге с execute_process
, а также передать некоторые переменные кэша в качестве -D
параметров.
Если переменная имеет тип string, она работает. Однако, если переменная является списком, типичный метод передачи списка в командной строке, похоже, не работает.
Я перепробовал все комбинации, перечисленные в этом ответе. Я даже пытался присоединиться к 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
)