【发布时间】:2019-05-17 07:41:02
【问题描述】:
我正在使用带有本机项目的 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 中解决的方法以避免以这种方式更改它。
【问题讨论】:
-
问题不在串联:根据输出,你的
DEPENDENCIES_COMMON_PATH变量的值包含双引号,这已经是错误的了。你确定dependencies.common.dir="/home/vgonisanz/foo"需要双引号吗? -
好吧,你搞定了,从变量中删除引号解决了这个问题。把它作为答案投票吧。