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

时间:2019-05-17 07:41:02

标签: android c++ gradle cmake

我正在将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}中找不到预期的路径。该路径是正确的,并且如果经过硬编码也可以使用,因此我在文件app/.externalNativeBuild/cmake/debug/armeabi-v7a/cmake_build_output.txt

中检查CMake输出。

,输出为:

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 个答案:

答案 0 :(得分:3)

致电时

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

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

string(REPLACE "\"" "" DEPENDENCIES_COMMON_PATH ${DEPENDENCIES_COMMON_PATH})