如何使用-D将列表传递给CMake?

Dav*_*ein 4 cmake

我正在尝试调用add_test(),如下所示:

add_test(NAME ${TEST_NAME} COMMAND cmake
  -DTEST_PROG:FILEPATH=${TEST_EXECUTABLE} 
 ...
  -DTEST_EXEC_DIRS:PATH=${TEST_EXEC_DIRS}
  -P SciTextCompare.cmake
)
Run Code Online (Sandbox Code Playgroud)

$ {TEST_EXEC_DIRS}是一个CMake列表,当我执行上面的代码时,CTestTestfile.cmake中的结果行只包含列表中的第一个项目,所以我最终得到了cmake的以下参数:

"cmake" "-DTEST_PROG:FILEPATH=C:/path/to/my/executable" ... "-DTEST_EXEC_DIRS:PATH=C:/first/dir/in/list" "-P" "SciTextCompare.cmake"
Run Code Online (Sandbox Code Playgroud)

如何传入列表并让它像这样调用cmake:

"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"
Run Code Online (Sandbox Code Playgroud)

sak*_*kra 5

如果您使用的是CMake版本2.8.11或更高版本,则可以使用生成器表达式 $<SEMICOLON>来防止在带有";"的参数上进行列表扩展:

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
)
Run Code Online (Sandbox Code Playgroud)