How can you pass a list to CMake using -D?

cmake

Solution

If you are using CMake version 2.8.11 or later you can use the generator expression `$<SEMICOLON>` to prevent the list expansion on an argument with ';':

cmake_minimum_required(VERSION 2.8.11)
...
string (REPLACE ";" "$<SEMICOLON>" GENERATOR_TEST_EXEC_DIRS "${TEST_EXEC_DIRS}")
add_test(NAME ${TEST_NAME} COMMAND ${CMAKE_COMMAND}
  -DTEST_PROG:FILEPATH=${TEST_EXECUTABLE} 
 ...
  -DTEST_EXEC_DIRS:PATH=${GENERATOR_TEST_EXEC_DIRS}
  -P SciTextCompare.cmake
)

Problem

I'm trying to call add_test(), like so: ``` add_test(NAME ${TEST_NAME} COMMAND cmake -DTEST_PROG:FILEPATH=${TEST_EXECUTABLE} ... -DTEST_EXEC_DIRS:PATH=${TEST_EXEC_DIRS} -P SciTextCompare.cmake ) ``` ${TEST_EXEC_DIRS} is a CMake list, and when I execute the above code, the resulting line in CTestTestfile.cmake only contains the first item in the list so, that I end up with the following arguments to cmake: ``` "cmake" "-DTEST_PROG:FILEPATH=C:/path/to/my/executable" ... "-DTEST_EXEC_DIRS:PATH=C:/first/dir/in/list" "-P" "SciTextCompare.cmake" ``` How can I pass in a list and have it invoke cmake like so: ``` "cmake" "-DTEST_PROG:FILEPATH=C:/path/to/my/executable" ... "-DTEST_EXEC_DIRS:PATH=C:/first/dir/in/list;C:/second/dir/in/list" "-P" "SciTextCompare.cmake" ```

Original source