Gradle + Cmake добавляют неожиданные кавычки при конкатенации пути - PullRequest
5 голосов
/ 17 мая 2019

Я использую Android studio с собственным проектом для использования скомпилированной библиотеки C ++. Я использую Gradle + CMake, чтобы связать проект с оболочкой для вызова библиотеки

Я определяю в моих local.properties переменную:

dependencies.common.dir="/home/vgonisanz/foo"

Мой вызов gradle.build CMake:

cmake {
    cppFlags ""
    arguments   "-DANDROID_ABI=armeabi-v7a",
                "-DDEPENDENCIES_COMMON_PATH=" + getCommonDir('dependencies.common.dir')
}
ndk {
    abiFilters "armeabi-v7a"
}

Мой CMakelists.txt содержит следующий код:

set(COMMON_INCLUDE_PATH "${DEPENDENCIES_COMMON_PATH}/modules/module_foo/include")
message("Using dependency path: ${DEPENDENCIES_COMMON_PATH}")
message("Using include path: ${COMMON_INCLUDE_PATH}")
include_directories(${COMMON_INCLUDE_PATH})

Но когда я собираю библиотеку, не могу найти ожидаемый путь в $ {COMMON_INCLUDE_PATH}. Путь правильный и работает, если он жестко закодирован, поэтому я проверяю вывод CMake в моем файле app/.externalNativeBuild/cmake/debug/armeabi-v7a/cmake_build_output.txt

и вывод:

Using dependency path: "/home/vgonisanz/foo"
Using include path: "/home/vgonisanz/foo"/modules/module_foo/include
Configuring done

Проблема в том, что переменная CMake находится между кавычкой и нарушает сборку. Обычно я сопоставляю путь и переменные с CMake, поэтому, почему это происходит в среде Gradle?

Я мог бы установить переменные в gradle.build, но я хотел бы знать, существует ли способ решить в CMakeLists.txt, чтобы избежать его изменения таким образом.

1 Ответ

3 голосов
/ 17 мая 2019

Когда вы вызываете это:

"-DDEPENDENCIES_COMMON_PATH=" + getCommonDir('dependencies.common.dir')

Gradle включает в себя кавычки к предложениям, отправленным в cmake.Вы можете удалить кавычки внутри CMake, используя функцию REPLACE.Например:

string(REPLACE "\"" "" DEPENDENCIES_COMMON_PATH ${DEPENDENCIES_COMMON_PATH})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...