【问题标题】:CMake Android cross-compiling get empty compiler flags for Debug and ReleaseCMake Android交叉编译为调试和发布获取空编译器标志
【发布时间】:2019-10-18 05:49:08
【问题描述】:

为了演示这个问题,我做了一个最小的 CMakeLists.txt:

cmake_minimum_required(VERSION 3.12)
project(FlagsTest)

add_executable(myapp myapp.cpp)

我在 Android NDK 中使用工具链文件配置了这个 cmake 项目。使用忍者生成器,cmake缓存变量ANDROID_ABI设置为armeabi-v7a。软件和工具链的版本是:

  • CMake:Windows 中的 3.12.3 和 3.14.6。
  • Android NDK 和工具链文件:C:/Users/my_name/AppData/Local/Android/Sdk/ndk/20.0.5594570/build/cmake/android.toolchain.cmake
  • 忍者:1.9.0

整个东西都成功配置和生成。但是,cmake 缓存变量 CMAKE_CXX_FLAGS_DEBUG、CMAKE_CXX_FLAGS_RELEASE、CMAKE_C_FLAGS_DEBUG 和 CMAKE_C_FLAGS_RELEASE都是空白。这导致 debug build 中没有 debug 符号,release build 中没有优化,这让我们很困扰。

目前,我通过从 cmake 命令行手动指定这些变量来解决问题。但是由于这些变量应该由cmake自动设置,我想知道这是cmake中的错误,还是Android SDK中的错误。

【问题讨论】:

    标签: android cmake android-ndk


    【解决方案1】:

    这是由于 ndk 工具链文件中的配置不正确造成的。它为 CMAKE_CXX_FLAGS_DEBUG 和 CMAKE_CXX_FLAGS_RELEASE 设置了空的初始值,以防止 CMake 使用默认值:

    set(CMAKE_C_FLAGS_DEBUG ""
      CACHE STRING "Flags used by the compiler during debug builds.")
    set(CMAKE_CXX_FLAGS_DEBUG ""
      CACHE STRING "Flags used by the compiler during debug builds.")
    set(CMAKE_C_FLAGS_RELEASE ""
      CACHE STRING "Flags used by the compiler during release builds.")
    set(CMAKE_CXX_FLAGS_RELEASE ""
      CACHE STRING "Flags used by the compiler during release builds.")
    

    由于直接修改这个文件不好,似乎解决它的唯一方法是在命令行中为每一代显式指定值。

    【讨论】:

      【解决方案2】:

      CMake 将在内部处理发布和调试标志,您应该在命令行上传递 -DCMAKE_BUILD_TYPE=Release 或 -DCMAKE_BUILD_TYPE=Debug。

      【讨论】:

        猜你喜欢
        • 2012-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-04
        • 1970-01-01
        • 1970-01-01
        • 2020-02-05
        • 1970-01-01
        相关资源
        最近更新 更多