Разделение файлов C ++ между несколькими вариантами продуктов - PullRequest
0 голосов
/ 10 октября 2019

Мой модуль Android Studio имеет два варианта продукта:

flavour1 использует NDK и включает в себя файлы cpp, тогда как flavour2 не использует NDK и не должен включать файлы cpp. (Та же проблема возникает, когда некоторые cppфайлы используются только с flavour1, другие cpp файлы относятся только к flavour2).

Я поместил все файлы cpp в flavour1/cpp и ожидал, что он выполнит свою работу. Однако то, что работает для Java, похоже, не работает для cpp, поскольку cmake всегда принимает файлы, расположенные в каталоге, указанном CMAKE_HOME_DIRECTORY, то есть main/cpp, и ничего больше! Любое другое расположение файлов cpp выдает сообщение об ошибке:

Failed to activate protocol version: "CMAKE_HOME_DIRECTORY" is set but incompatible with configured source directory value.

Единственное, что я могу обойти, - это иметь разные библиотеки для каждого вида продукта. Есть ли более естественный подход?

1 Ответ

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

Не думаю, что вы можете полностью отключить externalNativeBuild в зависимости от версии сборки. То, что вы могли бы сделать, это передать аргумент CMake, основанный на варианте сборки, и просто не создавать библиотеки в варианте, из которого вы хотите исключить нативные библиотеки:

flavor1 {
    externalNativeBuild {
        cmake {
            arguments "-DENABLE_NATIVE_LIBS=TRUE"
        }
    }
}

flavor2 {
    externalNativeBuild {
        cmake {
            arguments "-DENABLE_NATIVE_LIBS=FALSE"
        }
    }
}

А затем в ваших списках CMakeLists.txt:

cmake_minimum_required(VERSION whatever you support)

if (NOT ENABLE_NATIVE_LIBS)
    return()
endif()

# Rest of your CMakeLists.txt here.

Я не проверял это, но оно должно работать.

...