I need to define some custom macros such as "DEBUG", "RELEASE", "DEMO_VER" and "FULL_VER" in Android Studio build.gradle file so that my C/C++ code can detect them like:
#ifdef DEBUG
...
#else //RELEASE
...
#endif
or
#ifdef DEMO_VER
...
#else //FULL_VER
...
#endif
My understanding is that these macros should be defined as g++ compiler options in the build variant blocks like the following code:
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"
}
}
}
The problem is that I can not use "cmake" inside either "BuildType" nor "ProductFlavor", the method can not be found.
So what is the correct way to pass in compiler macros for different product flavors / build types?
解决方案
Found answer myself: The "cmake" method belongs to class "externalNativeBuild" class, therefore it needs to be embedded inside "externalNativeBuild" block, like this:
release
{
externalNativeBuild
{
cmake
{
cppFlags += "-DRELEASE"
}
}
...
}
Now all the preprocessors defined in build.gradle are passed into the C/C++ compiler.