Gradle + Cmake在连接路径时添加意外的引号

vgo*_*anz 5 c++ android cmake gradle

我正在将Android Studio与本机项目一起使用,以使用预编译的C ++库。我使用gradle + CMake将项目链接到包装器以调用库

我在local.properties中定义一个变量:

dependencies.common.dir="/home/vgonisanz/foo"
Run Code Online (Sandbox Code Playgroud)

我的gradle.build呼叫CMake:

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

我的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})
Run Code Online (Sandbox Code Playgroud)

但是,当我构建库时,在$ {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
Run Code Online (Sandbox Code Playgroud)

问题是CMake变量在引号之间,这破坏了构建。我通常以这种方式在CMake中连接路径和变量,为什么这在gradle环境中发生?

我可以在gradle.build中设置变量,但我想知道是否存在一种在CMakeLists.txt中求解的方法,以避免以这种方式进行更改。

goe*_*goe 3

当你这样调用时:

"-DDEPENDENCIES_COMMON_PATH=" + getCommonDir('dependencies.common.dir')
Run Code Online (Sandbox Code Playgroud)

Gradle 包含发送到 cmake 的句子的引号。您可以使用 REPLACE 功能删除 CMake 内的引号。例如:

string(REPLACE "\"" "" DEPENDENCIES_COMMON_PATH ${DEPENDENCIES_COMMON_PATH})
Run Code Online (Sandbox Code Playgroud)