分号在cmake文件中将列表分隔为cmake命令

时间:2016-09-03 11:45:27

标签: amazon-web-services cmake aws-sdk

我正在我的应用程序中构建amazon的aws-sdk-cpp。所以我从aws-sdk-cpp.tar.gz文件中提取内容并作为ExternalProject运行。

ExternalProject_Add(awssdk
    PREFIX DIR
    URL ${CMAKE_CURRENT_SOURCE_DIR}/${AWS_SDK_SRC_TAR}
    BUILD_COMMAND ${CMAKE_COMMAND} cmake -DCMAKE_BUILD_TYPE=Debug -DBUILD_ONLY='dynamodb;kenisis' -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/Ext/Aws/CtcInstall/${CMAKE_INSTALL_PREFIX} -DENABLE_TESTING=OFF ${CMAKE_BINARY_DIR}/source

但是,当我通过-DBUILD_ONLY='dynamodb;kenisis'(由aws cmake文件支持)时,Build失败了。如果我通过-DBUILD_ONLY=dynamodb,则仅生成与dynamodb相关的目标。但我也需要kenisis个相关目标。我如何在ExternalProject_Add中传递以分号分隔的列表。

1 个答案:

答案 0 :(得分:1)

自己做一些测试 - 包括@ usr1234567评论中的提示 - 我确实成功运行了以下内容(为了更容易再现,我在示例中放了Git地址):

ItemSerializer

笨拙的双反斜杠是必要的,因为ExternalProject_Add( awssdk PREFIX DIR GIT_REPOSITORY https://github.com/aws/aws-sdk-cpp.git CMAKE_CACHE_ARGS -DCMAKE_BUILD_TYPE:String=${CMAKE_BUILD_TYPE} -DBUILD_ONLY:String=dynamodb\\;kinesis -DCMAKE_INSTALL_PREFIX:String=${CMAKE_BINARY_DIR}/Ext/Aws/CtcInstall -DENABLE_TESTING:String=OFF ) 本身是一个CMake脚本函数,它经历了几个参数扩展循环。

<强>替代

更通用的方法是使用ExternalProject_Add()生成器表达式,如下所示:

$<SEMICOLON>

出于演示目的,我也在使用另一种方法来传递参数。