我正在将CMake与ExternalProject_Add一起使用来构建外部库。我已使用答案here生成以下内容(捕获到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做错了吗?

最佳答案

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}}")

关于c++ - 将CMake变量传递给ExternalProject_Add,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25533831/

10-12 20:43