格拉德尔+;Cmake在连接路径时添加意外的引号 我使用Android Studio使用一个本地项目使用一个预编译的C++库。我使用gradle+CMake将项目链接到包装器以调用库

格拉德尔+;Cmake在连接路径时添加意外的引号 我使用Android Studio使用一个本地项目使用一个预编译的C++库。我使用gradle+CMake将项目链接到包装器以调用库,android,c++,gradle,cmake,Android,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.d

我在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"
}
My 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\u INCLUDE\u path}中找不到预期的路径。路径是正确的,如果是硬编码的,则可以工作,因此我在我的文件
app/.externalNativeBuild/CMake/debug/armeabi-v7a/CMake\u build\u 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中解决的方法,以避免以这种方式进行更改。

当您调用此选项时:

"-DDEPENDENCIES_COMMON_PATH=" + getCommonDir('dependencies.common.dir')
Gradle包括发送给cmake的句子的引用。可以使用“替换”功能删除CMake中的引号。例如:

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

问题不在串联中:根据输出,您的
DEPENDENCIES\u COMMON\u PATH
变量的值包含双引号,这已经是错误的。您确定
dependencies.common.dir=“/home/vgonisanz/foo”
需要双引号吗?好的,您可以确定它,从变量中删除引号可以解决问题。把它作为投票的答案。这解决了问题,我投了赞成票,但这是一个不必要的正确配置。作为@Tsyvarev point,真正的问题是local.properties文件中的变量定义。无论如何,谢谢你。