Android Studio: Как определить пользовательские макросы в build.gradle (для разных вариантов сборки) и позволить родному коду C / C ++ обнаруживать их? - PullRequest
0 голосов
/ 17 октября 2018

Мне нужно определить некоторые пользовательские макросы, такие как " DEBUG ", " RELEASE ", " DEMO_VER " и " FULL_VER "в Android Studio build.gradle , чтобы мой код на C / C ++ мог их обнаружить, например:

#ifdef DEBUG
   ...
#else //RELEASE
   ...
#endif

или

#ifdef DEMO_VER
   ...
#else //FULL_VER
   ...
#endif

Насколько я понимаю, этимакросы должны быть определены как параметры компилятора g ++ в блоках варианта сборки, например, следующий код:

buildTypes 
{
    release 
    {
        cmake   <<====== Error!!!!!: could not find method cmake() for ...BuildType
        {
            cppFlags += "-DRELEASE"
        }
    }
    debug 
    {
        cmake   <<====== Error!!!!!: could not find method cmake() for ...BuildType
        {
            cppFlags += "-DDEBUG"
        }
    }
}
flavorDimensions "version"
productFlavors 
{
    demo 
    {
        cmake   <<====== Error!!!!!: could not find method cmake() for ...ProductFlavor
        {
            cppFlags += "-DEMO_VER"
        }
    }
    full
    {
        cmake   <<====== Error!!!!!: could not find method cmake() for ...ProductFlavor
        {
            cppFlags += "-DFULL_VER"
        }
    }
}

Проблема в том, что я не могу использовать " cmake " внутри "BuildType"или" ProductFlavor", метод не найден.Итак, как правильно передать макросы компилятора для разных типов продукта / типов сборки?

1 Ответ

0 голосов
/ 17 октября 2018

Сам нашел ответ: метод "cmake" принадлежит классу класса "externalNativeBuild", поэтому его необходимо встроить в блок "externalNativeBuild", например:

release
{
        externalNativeBuild
        {
            cmake
            {
                cppFlags += "-DRELEASE"
            }
        }
        ...
}

Теперь все препроцессоры определены в build.gradle передается в компилятор C / C ++.

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