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中求解的方法,以避免以这种方式进行更改。
当你这样调用时:
"-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)
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |