【问题标题】:Gradle + Cmake add unexpected Quotation marks when concatenate pathGradle + Cmake 在连接路径时添加意外的引号
【发布时间】: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" 需要双引号吗?
  • 好吧,你搞定了,从变量中删除引号解决了这个问题。把它作为答案投票吧。

标签: android c++ gradle cmake


【解决方案1】:

当你调用它时:

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

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

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

【讨论】:

  • 这解决了问题,我投票赞成,但如果配置正确,这是不需要的。正如@Tsyvarev 所说,真正的问题是local.properties 文件中的变量定义。还是谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
  • 2023-02-15
  • 1970-01-01
  • 1970-01-01
  • 2015-04-20
  • 2020-03-01
相关资源
最近更新 更多