分号分隔列表到 cmake 文件中的 cmake 命令

Tej*_*ula 3 cmake amazon-web-services aws-sdk

我正在我的应用程序中构建亚马逊的 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
Run Code Online (Sandbox Code Playgroud)

But, when i pass -DBUILD_ONLY='dynamodb;kenisis'(supported by aws cmake file), Build is failing. If i pass -DBUILD_ONLY=dynamodb only dynamodb related targets are getting generated. But i need kenisis related targets also. How can i pass that semicolon separated list in ExternalProject_Add.

Flo*_*ian 6

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

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

笨拙的双反斜杠是必要的,因为它ExternalProject_Add()本身是一个 CMake 脚本函数,它经历了几个参数扩展循环。

选择

更通用的方法是使用这样的$<SEMICOLON>生成器表达式:

ExternalProject_Add(
    awssdk
    PREFIX DIR
    GIT_REPOSITORY https://github.com/aws/aws-sdk-cpp.git
    CMAKE_ARGS
        -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
        -DBUILD_ONLY=dynamodb$<SEMICOLON>kinesis
        -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/Ext/Aws/CtcInstall
        -DENABLE_TESTING=OFF
)
Run Code Online (Sandbox Code Playgroud)

仅出于演示目的,我还在此处使用了另一种传递参数的方式。