Передача переменных CMake в ExternalProject_Add

Я строю внешнюю библиотеку, используя CMake с ExternalProject_Add. Я использовал ответ Вот сгенерировать следующее (которое захватывает ввод командной строки в CMake, чтобы передать его команде ExternalProject_Add):

get_cmake_property(CACHE_VARS CACHE_VARIABLES)
foreach(CACHE_VAR ${CACHE_VARS})
get_property(CACHE_VAR_HELPSTRING CACHE ${CACHE_VAR} PROPERTY HELPSTRING)
if(CACHE_VAR_HELPSTRING STREQUAL "No help, variable specified on the command line.")
get_property(CACHE_VAR_TYPE CACHE ${CACHE_VAR} PROPERTY TYPE)
if(CACHE_VAR_TYPE STREQUAL "UNINITIALIZED")
set(CACHE_VAR_TYPE)
else()
set(CACHE_VAR_TYPE :${CACHE_VAR_TYPE})
endif()
set(CMAKE_ARGS "${CMAKE_ARGS} -D${CACHE_VAR}${CACHE_VAR_TYPE}=\"${${CACHE_VAR}}\"")
endif()
endforeach()

Команда ExternalProject_Add выглядит следующим образом:

ExternalProject_Add(external_lib
URL ${EXTERNALLIB_SOURCE_DIR}
PREFIX ${EXTERNALLIB_PREFIX}
CMAKE_ARGS "${CMAKE_ARGS};-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"INSTALL_DIR ${EXTERNALLIB_INSTALL_DIR}
BINARY_DIR "${EXTERNALLIB_PREFIX}/lib")

Я не могу понять, как правильно передать переменную CMAKE_ARGS в эту команду. Очевидно, что другие переменные работают нормально, но переменная CMAKE_ARGS, похоже, не раскрывается должным образом, поскольку я знаю, что она содержит то, что я хочу, чтобы она содержала. Я делаю что-то неправильно синтаксически с CMake?

3

Решение

set(CMAKE_ARGS "${CMAKE_ARGS} -D${CACHE_VAR}${CACHE_VAR_TYPE}=\"${${CACHE_VAR}}\"")

Вы хотите создать одну большую строку из всех вариантов. Вместо этого попробуйте простой список:

list(APPEND CMAKE_ARGS "-D${CACHE_VAR}${CACHE_VAR_TYPE}=${${CACHE_VAR}}")
4

Другие решения


По вопросам рекламы [email protected]