用于构建适用于 C++ 的 AWS SDK 的 CMake 参数
使用本节中列出的 CMake
您可以通过 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 文件夹中,然后将此参数传递给 cmake。cmake 配置步骤会生成您的客户端,并将其作为子目录包含在构建版本中。这对于生成 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
AUTORUN_UNIT_TESTS
如果为 ON,则在构建后自动运行单元测试。
- 值
-
ON | OFF
- 默认值
-
ON
AWS_AUTORUN_LD_LIBRARY_PATH
供 CMake 自动运行的单元测试使用、需追加到 LD_LIBRARY_PATH 环境变量中的路径。如果覆盖的依赖项需要自定义运行时库,请设置此路径。
- 值
-
字符串:
- 默认值
-
(不适用)
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_REGION
用于集成测试的 AWS 区域。
- 值
-
字符串:
- 默认值
-
(不适用)
BUILD_BENCHMARKS
如果为 ON,则构建基准可执行文件。
- 值
-
ON | OFF
- 默认值
-
OFF
BUILD_DEPS
如果为 ON,则构建第三方依赖项。
- 值
-
ON | OFF
- 默认值
-
ON
BUILD_ONLY
仅构建要使用的客户端。如果设置为高级别 SDK,例如 aws-cpp-sdk-transfer,BUILD_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,则在使用 IXmlHttpRequest2 时绕过计算机的默认代理设置。
- 值
-
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 分配和解除分配。
注意
为防止出现链接器不匹配错误,必须在整个构建系统中使用相同的值(0 或 1)。
要安装自己的内存管理器来处理 SDK 的分配,必须为依赖该 SDK 的所有构建目标进行设置 -DCUSTOM_MEMORY_MANAGEMENT 和定义 USE_AWS_MEMORY_MANAGEMENT。
DISABLE_INTERNAL_IMDSV1_CALLS
如果为 ON,则不会对实例元数据服务的 V1 API 进行内部调用。如果为 OFF,且 IMDSv2 调用失败,则 IMDSv2 调用将回退到使用 IMDSv1。有关 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_OPERATIONS 为 ON,且 REGENERATE_CLIENTS 为 ON,则服务客户端中与操作相关的函数将被标记为 virtual。
如果 ENABLE_VIRTUAL_OPERATIONS 为 OFF,且 REGENERATE_CLIENTS 为 ON,则 virtual 不会添加到操作函数中,服务客户端类将被标记为 final。
如果 ENABLE_VIRTUAL_OPERATIONS 为 OFF,SDK 还将在编译时为 gcc 和 clang 添加 -ffunction-sections 和 -fdata-sections 编译器标志。
有关更多信息,请参阅 GitHub 上的 CMake Parameters
- 值
-
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
REGENERATE_DEFAULTS
如果为 ON,则此参数会删除所有生成的默认代码,然后从 code-generation/defaults 文件夹重新生成这些代码。例如:
-DREGENERATE_DEFAULTS=1
注意
要使用 REGENERATE_DEFAULTS 参数,您必须在 PATH 中安装 Python 2.7
SIMPLE_INSTALL
如果为 ON,则安装过程不会在 bin/ 和 lib/ 下方插入平台特定的中间目录。如果您需要在单个安装目录下发布多平台版本,则设为 OFF。
- 值
-
ON | OFF
- 默认值
-
ON
TARGET_ARCH
要针对移动平台进行交叉编译或构建,则必须指定目标平台。默认情况下,构建会检测主机操作系统并针对检测到的操作系统进行构建。
注意
当 TARGET_ARCH 为 ANDROID 时,还有其他选项可用。请参阅 Android CMake 变量和选项。
- 值
-
WINDOWS | LINUX | APPLE | ANDROID
USE_CRT_HTTP_CLIENT
如果为 ON,将使用通用运行时 HTTP 客户端,并且不会构建或包含 WinHttp 和 libcurl 之类的遗留系统。
- 值
-
ON | OFF
- 默认值
-
OFF
USE_IXML_HTTP_REQUEST_2
仅适用于 Windows。如果为 ON,则对 HTTP 堆栈使用 com 对象 IXmlHttpRequest2。
- 值
-
ON | OFF
- 默认值
-
OFF
USE_OPENSSL
如果为 ON,则 SDK 将使用 OpenSSL 构建;否则使用 awslabs/aws-lcAWS-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
Android 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
ANDROID_NATIVE_API_LEVEL
仅限 Android。控制 SDK 针对哪个 API 级别进行构建。如果您将 ANDROID_STL 设置为 gnustl,则可以选择任何 API 级别。如果您使用 libc++,则必须使用至少 21 级的 API 级别。
- 默认值
-
因 STL 选择而异。
ANDROID_STL
仅限 Android。控制 SDK 使用哪种 C++ 标准库。
重要
如果使用 gnustl 选项,SDK 内部可能会出现性能问题;我们强烈建议使用 libc++_shared 或 libc++_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,则构建系统会检查此变量。