OpenHarmony SDK CMake 版本兼容性问题解决:从 3.0 到 3.10 的升级之路

问题背景

在使用 OpenHarmony SDK 的 CMake 工具链编译 cJSON 项目时,遇到了 CMake 版本兼容性错误。错误信息提示 CMake 已经移除了对 3.5 以下版本的兼容性支持。

错误信息

执行 CMake 配置命令时,出现了以下错误:

cmake -DCMAKE_TOOLCHAIN_FILE=/Users/jianguo/Desktop/ohosdk/native/build/cmake \
      -DCMAKE_INSTALL_PREFIX=/Users/jianguo/OpenHarmonyTpc/cJSON \
      -DOHOS_ARCH=arm64-v8a .. -L

错误输出:

CMake Error at CMakeLists.txt:2 (cmake_minimum_required):
  Compatibility with CMake < 3.5 has been removed from CMake.

  Update the VERSION argument <min> value.  Or, use the <min>...<max> syntax
  to tell CMake that the project requires at least <min> but has been updated
  to work with policies introduced by <max> or earlier.

  Or, add -DCMAKE_POLICY_VERSION_MINIMUM=3.5 to try configuring anyway.

问题分析

1. 版本兼容性问题

查看 CMakeLists.txt 文件第 2 行,发现项目要求的最低 CMake 版本是 3.0:

cmake_minimum_required(VERSION 3.0)

但是当前系统安装的 CMake 版本已经移除了对 3.5 以下版本的兼容性支持,因此需要更新最低版本要求。

2. 工具链文件路径问题

在解决版本问题后,还遇到了工具链文件路径错误:

CMake Error: Could not find toolchain file:
  /Users/jianguo/Desktop/ohosdk/native/build/cmake

这是因为工具链文件路径指向了目录而不是具体的 .cmake 文件。

解决步骤

步骤 1:更新 CMake 最低版本要求

CMakeLists.txt 中的最低版本要求从 3.0 更新为 3.5:

# 修改前
cmake_minimum_required(VERSION 3.0)

# 修改后
cmake_minimum_required(VERSION 3.5)

步骤 2:进一步优化版本要求

虽然 3.5 版本可以解决错误,但 CMake 会发出警告,建议使用 3.10 或更高版本以避免未来的兼容性问题:

# 最终版本
cmake_minimum_required(VERSION 3.10)

步骤 3:修正工具链文件路径

检查工具链目录内容:

ls -la /Users/jianguo/Desktop/ohosdk/native/build/cmake

发现目录中包含以下文件:

  • ohos.toolchain.cmake - OpenHarmony 工具链文件
  • sdk_native_platforms.cmake - SDK 平台配置文件

将 CMake 命令中的工具链路径从目录改为具体文件:

# 修改前
-DCMAKE_TOOLCHAIN_FILE=/Users/jianguo/Desktop/ohosdk/native/build/cmake

# 修改后
-DCMAKE_TOOLCHAIN_FILE=/Users/jianguo/Desktop/ohosdk/native/build/cmake/ohos.toolchain.cmake

步骤 4:验证配置成功

重新运行 CMake 配置命令:

cd build
cmake -DCMAKE_TOOLCHAIN_FILE=/Users/jianguo/Desktop/ohosdk/native/build/cmake/ohos.toolchain.cmake \
      -DCMAKE_INSTALL_PREFIX=/Users/jianguo/OpenHarmonyTpc/cJSON \
      -DOHOS_ARCH=arm64-v8a .. -L

配置成功,输出显示:

-- Configuring done (3.1s)
-- Generating done (0.0s)
-- Build files have been written to: /Users/jianguo/OpenHarmonyTpc/cJSON/build

验证 Makefile 已生成:

ls -la Makefile

最终解决方案总结

修改的文件

CMakeLists.txt - 第 2 行:

cmake_minimum_required(VERSION 3.10)

正确的 CMake 命令

cmake -DCMAKE_TOOLCHAIN_FILE=/Users/jianguo/Desktop/ohosdk/native/build/cmake/ohos.toolchain.cmake \
      -DCMAKE_INSTALL_PREFIX=/Users/jianguo/OpenHarmonyTpc/cJSON \
      -DOHOS_ARCH=arm64-v8a .. -L

经验总结

  1. 版本兼容性:随着 CMake 的更新,旧版本的兼容性会被逐步移除。建议项目使用较新的最低版本要求(如 3.10 或更高),以避免未来的兼容性问题。

  2. 工具链文件路径:使用 CMAKE_TOOLCHAIN_FILE 时,必须指向具体的 .cmake 文件,而不是目录。如果路径错误,CMake 会明确提示找不到文件。

  3. 错误排查顺序

    • 首先查看错误信息,理解问题的根本原因
    • 检查相关配置文件(如 CMakeLists.txt)
    • 验证文件路径和文件是否存在
    • 逐步修复问题并验证
  4. OpenHarmony SDK 工具链:使用 OpenHarmony SDK 的 CMake 工具链时,确保:

    • SDK 路径正确
    • 使用正确的工具链文件(通常是 ohos.toolchain.cmake
    • 设置正确的架构参数(如 OHOS_ARCH=arm64-v8a

后续操作

配置成功后,可以正常使用 Make 进行编译:

make              # 编译项目
make install      # 安装到指定目录

参考资料


环境:macOS, CMake 3.x, OpenHarmony SDK

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新

更多推荐