1# cmake变更说明 2 3## cl.cmake.1 应用编译构建对不支持命令强校验 4 5**变更原因** 6 7cmake从3.16.5版本升级到3.28.2版本,引入了该项变更。 8 9**变更影响** 10 11该变更为不兼容性变更。 12 13变更前: 14 15应用编译构建会忽略不支持的命令参数,功能正常。 16 17变更后: 18 19在开发者使用不支持的命令参数(如 -v)时,应用编译构建将出现失败提示,提示内容如下: 20 21```` 22CMake Error: Unknown argument -v 23CMake Error: Run 'cmake --help' for all supported options. 24```` 25**变更发生的版本** 26 27从OpenHarmony SDK 5.0.0.33开始。 28 29**适配指导** 30 311、查询支持的命令参数 32 33命令行执行 cmake --help 可以查看支持的命令参数合集 34 35我们也可以在 [cmake.org](https://cmake.org/cmake/help/v3.28/manual/cmake.1.html) 查看 cmake 官方指导文档,Options 详细描述了支持的命令参数合集及其说明 36 372、DevEco Studio构建的项目适配,删除项目模块目录下 build-profile.json5 中 arguments 配置的不支持的参数,删除内容如下: 38 39```` 40{ 41 "apiType": '', 42 "buildOption": { 43 "externalNativeOptions": { 44 "path": "", 45 "arguments": "-v", // 删除该项配置中不支持的参数,如删除-v 46 "cppFlags": "", 47 } 48 }, 49 ... 50} 51```` 52 533、命令行构建的项目适配,删除构建命令中不支持的参数,删除内容如下: 54 55```` 56{native所在目录}/build-tools/cmake/bin/cmake 57-HC:{项目所在目录}/entry/src/main/cpp 58-BC:{项目所在目录}/entry/.cxx/default/default/arm64-v8a 59-DOHOS_ARCH=arm64-v8a 60-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={项目所在目录}/entry/build/default/intermediates/cmake/default/obj/arm64-v8a 61-DCMAKE_BUILD_TYPE=Debug 62-DOHOS_SDK_NATIVE={native所在目录} 63-DCMAKE_SYSTEM_NAME=OHOS 64-DCMAKE_OHOS_ARCH_ABI=arm64-v8a 65-DCMAKE_EXPORT_COMPILE_COMMANDS=ON 66-DCMAKE_TOOLCHAIN_FILE={native所在目录}/build/cmake/ohos.toolchain.cmake 67-GNinja 68-DCMAKE_MAKE_PROGRAM={native所在目录}/build-tools/cmake/bin/ninja 69--no-warn-unused-cli 70-v // 删除执行命令中不支持的参数-v 71```` 72 73 74 75## cl.cmake.2 应用编译构建建议cmake_minimum_required修改为不低于3.5.0的版本 76 77**变更原因** 78 79cmake从3.16.5版本升级到3.28.2版本,引入了该项变更。 80 81**变更影响** 82 83该变更为不兼容性变更。 84 85变更前: 86 87开发者使用默认模板(配置为:cmake_minimum_required(VERSION 3.4.1))时,应用编译构建正常 88 89变更后: 90 91开发者使用默认模板(配置为:cmake_minimum_required(VERSION 3.4.1))时,将出现告警提示,提示内容如下: 92 93``` 94CMake Deprecation Warning at CMakeLists.txt:2 (CMAKE_MINIMUM_REQUIRED): 95 Compatibility with CMake < 3.5 will be removed from a future version of 96 CMake. 97 98 Update the VERSION argument <min> value or use a ...<max> suffix to tell 99 CMake that the project does not need compatibility with older versions. 100``` 101 102**变更发生的版本** 103 104从OpenHarmony SDK 5.0.0.33开始。 105 106**适配指导** 107 108修改项目 CMakeLists.txt 中 cmake_minimum_required 配置,修改内容如下: 109 110```` 111# the minimum version of CMake. 112cmake_minimum_required(VERSION 3.4.1) // 修改为 cmake_minimum_required(VERSION 3.5.0) 113 114project(xxx) 115... 116```` 117 118 119 120## cl.cmake.3 应用编译构建harA链接harB的so,导致hap包so冲突 121 122**变更原因** 123 124cmake从3.16.5版本升级到3.28.2版本,引入了该项变更。 125 126**变更影响** 127 128cmake版本升级到3.28.2之后,当某har模块(如harA)的CMakeLists.txt中链接了 ”依赖har模块(如harB)中的so” 时,此so会被打包到harA中,可能导致最终打HAP包时so版本冲突。 129 130 **适配指导** 131 132如果so版本冲突,请在工程级或者模块级build-profile.json5文件中buildOption下添加nativeLib/filter/select字段,根据包名、版本、产物名称等,选择打包或排除so文件到HAP产物。具体请参考[关于select的使用](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-hvigor-cpp-V5#section14491810432)。 133 134```` 135{ 136 buildOption:{ 137 nativeLib:{ 138 filter:{ 139 select:[ // select的优先级高于excludes、pickFirsts等配置项 140 { 141 package: "@ohos/curl", // 包名 142 version: "1.3.5", // 包版本 143 include: ["libcurl.so"], // 选择打包的native产物 144 exclude: ["libc++shared.so"], // 排除的native产物 145 }, 146 ]; 147 } 148 } 149 } 150} 151```` 152 153