CMake 用于构建 适用于 C++ 的 AWS SDK - 适用于 C++ 的 AWS SDK

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

CMake 用于构建 适用于 C++ 的 AWS SDK

使用本节中列出的CMake参数来自定义 SDK 的构建方式。

您可以使用 CMake GUI 工具或命令行使用 -D 来设置这些选项。 例如:

cmake -DENABLE_UNITY_BUILD=ON -DREGENERATE_CLIENTS=1

一般 CMake 变量和选项

以下是影响 SDK 源代码构建过程的常规 cmake 变量和选项。

注意

在为适用于 C++ 的 SDK 本身构建 SDK 源代码时,请使用这些参数。

ADD_CUSTOM_CLIENTS

根据 API 定义构建任意客户端。将您的定义放在 code-generation/api-definitions 文件夹中,然后将此参数传递给 cmakecmake 配置步骤会生成您的客户端,并将其作为子目录包含在构建版本中。这对于生成 C++ 客户端以使用您的某个 API Gateway 服务特别有用。例如:

-DADD_CUSTOM_CLIENTS="serviceName=myCustomService,version=2015-12-21;serviceName=someOtherService,version=2015-08-15"
注意

要使用 ADD_CUSTOM_CLIENTS 参数,您必须在 PATH 中安装 Python 2.7、Java(JDK 1.8+)和 Maven

AUTORUN_UNIT_TESTS

如果为 ON,则在构建后自动运行单元测试。

ON | OFF

默认

ON

AWS_AUTORUN_ld_Library_Path

要追加到 LD_LIBRARY_PATH 中的路径以供单元测试自动运行。 CMake如果覆盖的依赖项需要自定义运行时库,请设置此路径。

字符串。

默认

不适用

AWS_SDK_WARNINGS_ARE_ERRORS

如果为 ON,则将编译器警告视为错误。如果在新的或不常见的编译器上发现错误,请尝试将此参数设置为 OFF

ON | OFF

默认

ON

AWS_USE_CRYPTO_SHARED_LIBS

如果找到共享加密库,则强制 FindCrypto 使用该库。将此选项设置为 OFF 可使用BUILD_SHARED_LIBS的设置。

ON | OFF

默认

OFF

AWS_TEST_区域

AWS 区域 用于集成测试的。

字符串。

默认

不适用

BUILD_BENCHMARKS

如果为 ON,则构建基准可执行文件。

ON | OFF

默认

OFF

BUILD_DEPS

如果为 ON,则构建第三方依赖项。

ON | OFF

默认

ON

BUILD_ONLY

仅构建要使用的客户端。如果设置为高级别 SDK,例如 aws-cpp-sdk-transferBUILD_ONLY 会解析任何低级别客户端依赖项。它还会构建与您选择的项目相关的集成和单元测试(如果存在)。这是一个列表参数,其值由分号(;)字符分隔。例如:

-DBUILD_ONLY="s3;cognito-identity"
注意

无论 BUILD_ONLY 参数的值如何设置,始终都会构建核心 SDK 模块 aws-sdk-cpp-core

BUILD_OPTEL

如果为 ON,则构建跟踪的开放遥测实现。

ON | OFF

默认

OFF

BUILD_SHARED_LIBS

一个内置 CMake 选项,为了便于查看,此处重新公开。如果为 ON,它会构建共享库;否则,它只构建静态库。

注意

要动态链接到 SDK,必须使用该 SDK 为所有构建目标定义 USE_IMPORT_EXPORT 符号。

ON | OFF

默认

ON

BYPASS_DEFAULT_PROXY

如果是ON,则在使用 IXml HttpRequest 2 时绕过计算机的默认代理设置。

ON | OFF

默认

ON

CPP_STANDARD

指定用于 C++ 14 和 17 代码库的自定义 C++ 标准。

11 | 14 | 17

默认

11

CURL_INCLUDE_DIR

curl 的路径包括包含 libcurl 标题的目录。

所选 include 目录的字符串路径。例如,D:/path/to/dir/with/curl/include

默认

不适用

CURL_LIBRARY

要链接的 curl 库文件的路径。该库可以是静态库或导入库,具体取决于您的应用程序需求。

curl 库文件的字符串路径。例如,D:/path/to/static/libcur/file/ie/libcurl.lib.a

默认

不适用

CUSTOM_MEMORY_MANAGEMENT

要使用自定义内存管理器,请将该值设置为 1。您可以安装自定义分配器,以便所有 STL 类型均使用自定义分配接口。如果将该值设置为 0,则可能仍需要使用 STL 模板类型来帮助确保 Windows 上的 DLL 安全。

如果静态链接为 ON,则自定义内存管理默认为关闭0)。如果动态链接为 ON,则自定义内存管理默认为开启1),并避免交叉 DLL 分配和解除分配。

注意

为防止出现链接器不匹配错误,必须在整个构建系统中使用相同的值(01)。

要安装自己的内存管理器来处理 SDK 的分配,必须为依赖该 SDK 的所有构建目标进行设置 -DCUSTOM_MEMORY_MANAGEMENT 和定义 USE_AWS_MEMORY_MANAGEMENT

禁用_INTERNAL_ _ IMDSV1 CALLS

如果为 ON,则不会对实例元数据服务的 V1 API 进行内部调用。如果是OFF,则如果 IMDSv2 呼叫失败, IMDSv1 则 IMDSv2 呼叫将回退为使用。有关 IMDSv1 和的更多信息 IMDSv2,请参阅 Amazon EC2 用户指南中的使用实例元数据服务访问实例元数据

ON | OFF

默认

OFF

ENABLE_ADDRESS_SANITIZER

如果为 ON,则为 gcc 或 clang 开启地址清理器。

ON | OFF

默认

OFF

ENABLE_CURL_LOGGING

如果为 ON,则将 curl 的内部日志通过管道传输到 SDK 记录器。

ON | OFF

默认

OFF

ENABLE_HTTP_CLIENT_TESTING

如果为 ON,则构建并运行相应的 HTTP 客户端测试套件。

ON | OFF

默认

OFF

ENABLE_RTTI

控制 SDK 是否在构建时启用运行时类型信息(RTTI)。

ON | OFF

默认

ON

ENABLE_TESTING

控制是否在 SDK 构建期间生成单元测试和集成测试项目。

ON | OFF

默认

ON

ENABLE_UNITY_BUILD

如果为 ON,则大多数 SDK 库都是作为单个生成的 .cpp 文件构建的。这可以显著减少静态库大小并加快编译速度。

ON | OFF

默认

OFF

ENABLE_VIRTUAL_OPERATIONS

此参数通常与 REGENERATE_CLIENTS 配合使用以生成代码。

如果 ENABLE_VIRTUAL_OPERATIONSON,且 REGENERATE_CLIENTSON,则服务客户端中与操作相关的函数将被标记为 virtual

如果 ENABLE_VIRTUAL_OPERATIONSOFF,且 REGENERATE_CLIENTSON,则 virtual 不会添加到操作函数中,服务客户端类将被标记为 final

如果 ENABLE_VIRTUAL_OPERATIONSOFF,SDK 还将在编译时为 gcc 和 clang 添加 -ffunction-sections-fdata-sections 编译器标志。

有关更多信息,请参阅上的CMake 参数 GitHub。

ON | OFF

默认

ON

ENABLE_ZLIB_REQUEST_COMPRESSION

对于支持它的服务,请求内容将被压缩。如果依赖项可用,则默认处于开启状态。

ON | OFF

默认

ON

FORCE_CURL

仅适用于 Windows。如果为 ON,则强制使用 curl 客户端,而不是默认的 WinHTTP 数据传输提供程序。

ON | OFF

默认

OFF

FORCE_SHARED_CRT

如果为 ON,则 SDK 将动态链接到 C 运行时;否则,它将使用 BUILD_SHARED_LIBS 设置(有时是向后兼容早期版本 SDK 所必需的)。

ON | OFF

默认

ON

G

生成构建构件,例如 Visual Studio 解决方案和 Xcode 项目。

例如,在 Windows 上:

-G "Visual Studio 12 Win64"

有关更多信息,请参阅您的平台 CMake 文档。

MINIMIZE_SIZE

ENABLE_UNITY_BUILD 的超集。如果为 ON,则此选项将打开 ENABLE_UNITY_BUILD 和其他二进制文件大小缩小设置。

ON | OFF

默认

OFF

NO_ENCRYPTION

如果为 ON,则阻止将默认的特定于平台的密码学实现内置到库中。设为 ON 可注入您自己的密码学实现。

ON | OFF

默认

OFF

NO_HTTP_CLIENT

如果为 ON,则阻止将默认的特定于平台的 HTTP 客户端内置到库中。如果为 ON,则需要提供自己的特定于平台的 HTTP 客户端实现。

ON | OFF

默认

OFF

REGENERATE_CLIENTS

如果为 ON,则此参数会删除所有生成的代码,然后从 code-generation/api-definitions 文件夹生成客户端目录。例如:

-DREGENERATE_CLIENTS=1
注意

要使用 REGENERATE_CLIENTS 参数,您必须在 PATH 中安装 Python 2.7、Java(JDK 1.8+)和 Maven

REGENERATE_DEFAULTS

如果为 ON,则此参数会删除所有生成的默认代码,然后从 code-generation/defaults 文件夹重新生成这些代码。例如:

-DREGENERATE_DEFAULTS=1
注意

要使用 REGENERATE_DEFAULTS 参数,您必须在 PATH 中安装 Python 2.7、Java(JDK 1.8+)和 Maven

SIMPLE_INSTALL

如果为 ON,则安装过程不会在 bin/lib/ 下方插入平台特定的中间目录。如果您需要在单个安装目录下发布多平台版本,则设为 OFF

ON | OFF

默认

ON

TARGET_ARCH

要针对移动平台进行交叉编译或构建,则必须指定目标平台。默认情况下,构建会检测主机操作系统并针对检测到的操作系统进行构建。

注意

TARGET_ARCHANDROID 时,还有其他选项可用。请参阅安卓 CMake 变量和选项

WINDOWS | LINUX | APPLE | ANDROID

USE_CRT_HTTP_CLIENT

如果ON,请使用通用运行时 HTTP 客户端,并且未构建或包含旧系统(例如 WinHttp 和 libcurl)。

ON | OFF

默认

OFF

USE_IXML_HTTP_REQUEST_2

仅适用于 Windows。如果是ON,则使用 com 对象 IXml HttpRequest 2 作为 HTTP 堆栈。

ON | OFF

默认

OFF

USE_OPENSSL

如果是ON,则软件开发工具包使用 OpenSSL 构建;否则,则使用 OpenSSL 进行构建。awslabs/aws-lc AWS-LC是由密码学团队为其客户维护的通用 AWS 密码库 AWS 。禁用该参数(设置为 OFF)会在系统默认目录中安装 AWS-LC 作为 OpenSSL 的替代项。如果您的系统中已经安装了 OpenSSL,请不要使用它。

ON | OFF

默认

ON

USE_TLS_V1_2

如果为 ON,HTTP 客户端会强制执行 TLS 1.2。

ON | OFF

默认

ON

USE_TLS_V1_3

如果为 ON,HTTP 客户端会强制执行 TLS 1.3。

ON | OFF

默认

OFF

安卓 CMake 变量和选项

在创建 SDK 的 Android 版本时(TARGET_ARCH 设置为 ANDROID),请使用以下变量。

ANDROID_ABI

仅限 Android。控制要输出哪个应用程序二进制接口(ABI)的代码。

注意

目前并非所有有效的 Android ABI 值都受支持。

arm64 | armeabi-v7a | x86_64 | x86 | mips64 | mips

默认

armeabi-v7a

ANDROID_BUILD_CURL

仅限 Android。如果为 ON,还要构建 curl。

ON | OFF

默认

ON

ANDROID_BUILD_OPENSSL

仅限 Android。如果为 ON,还要构建 Openssl。

ON | OFF

默认

ON

ANDROID_BUILD_ZLIB

仅限 Android。如果为 ON,还将构建 Zlib。

ON | OFF

默认

ON

安卓_原生_ API_LEVEL

仅限 Android。控制 SDK 针对哪个 API 级别进行构建。如果您将 ANDROID_STL 设置为 gnustl,则可以选择任何 API 级别。如果您使用 libc++,则必须使用至少 21 级的 API 级别。

默认

因 STL 选择而异。

ANDROID_STL

仅限 Android。控制 SDK 使用哪种 C++ 标准库。

重要

如果使用 gnustl 选项,SDK 内部可能会出现性能问题;我们强烈建议使用 libc++_sharedlibc++_static

libc++_shared | libc++_static | gnustl_shared | gnustl_static

默认

libc++_shared

ANDROID_TOOLCHAIN_NAME

仅限 Android。控制使用哪个编译器来构建 SDK。

注意

由于 Android NDK 已弃用 GCC,建议使用默认值。

默认

standalone-clang

DISABLE_ANDROID_STANDALONE_BUILD

仅限 Android。默认情况下,Android 版本会使用通过 NDK 脚本构建的基于 Clang 的独立工具链。要使用自己的工具链,请开启此选项

ON | OFF

默认

OFF

NDK_DIR

仅限 Android。指定一个替代路径,构建系统应从该路径查找 Android NDK。默认情况下,如果未设置环境变量 ANDROID_NDK,则构建系统会检查此变量。