【问题标题】:Passing CMake Variables to ExternalProject_Add将 CMake 变量传递给 ExternalProject_Add
【发布时间】:2014-10-21 10:22:26
【问题描述】:

我正在使用带有 ExternalProject_Add 的 CMake 构建一个外部库。我使用答案 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 的语法上做错了吗?

【问题讨论】:

    标签: c++ cmake external-project


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2019-09-06
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 2012-02-13
      相关资源
      最近更新 更多