CMake Android кросс-компиляция получает пустые флаги компилятора для отладки и выпуска - PullRequest
0 голосов
/ 18 октября 2019

Чтобы продемонстрировать эту проблему, я сделал минимум CMakeLists.txt:

cmake_minimum_required(VERSION 3.12)
project(FlagsTest)

add_executable(myapp myapp.cpp)

Я настраиваю этот проект cmake с помощью файла набора инструментов внутри Android NDK. Используется генератор ниндзя, а кешированная переменная cmake ANDROID_ABI установлена ​​на armeabi-v7a. Версии программного обеспечения и набора инструментов:

  • CMake: 3.12.3 и 3.14.6 в Windows.
  • 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 являются все пустыми . Это привело к отсутствию символа отладки в сборке отладки и оптимизации в сборке выпуска, что нас сильно беспокоило.

В настоящее время я сделал обходной путь, вручную указав эти переменные из командной строки cmake. Но так как эти переменные должны автоматически устанавливаться с помощью cmake, мне интересно, является ли это ошибкой в ​​cmake или ошибкой в ​​Android SDK.

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Это вызвано неправильной настройкой в ​​файле ndk toolchain. Он установил пустое начальное значение для 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.")

Поскольку нецелесообразно изменять этот файл напрямую, кажется, что единственный способ решить его - этоуказать значение явно в командной строке для каждого первого поколения.

0 голосов
/ 19 октября 2019

CMake позаботится о флагах выпуска и отладки внутри, вы должны передать -DCMAKE_BUILD_TYPE=Release или -DCMAKE_BUILD_TYPE=Debug в командной строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...