首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >意外的本机生成目标xyz。有效的目标是:

意外的本机生成目标xyz。有效的目标是:
EN

Stack Overflow用户
提问于 2018-01-15 15:00:23
回答 1查看 2.5K关注 0票数 5

我有一个Android项目,它依赖于一个本地共享库。我创建了一个cmake文件来编译库,并在android项目中(在src/main/jniLibs/armeabi中)添加了一个到共享库的软链接。这样,在构建android项目时,包中就包含了共享库。

以下是build.gradle的相关部分

代码语言:javascript
运行
复制
android {
    ...
    externalNativeBuild {
        cmake {
            path "../cpp/CMakeLists.txt"
        }
    }
}

问题是,gradle在调用构建它的指令之前试图打开共享库。

代码语言:javascript
运行
复制
Information:Gradle tasks [:app:assembleDebug]
Error:Could not list contents of 'app/src/main/jniLibs/armeabi/libfoo.so'. Couldn't follow symbolic link.

如何从项目内部调用cmake并同时将库包含在项目中?

--

编辑

在cmake中,共享库是用ExternalProject_Add构建的。不幸的是,gradle没有看到这个目标,也没有将导入的共享库视为目标。因此,这是行不通的:

代码语言:javascript
运行
复制
add_library(libfoo SHARED IMPORTED GLOBAL)
add_dependencies(libfoo libactual)

我试图使用gradle配置来调用构建特定目标:

代码语言:javascript
运行
复制
defaultConfig {
    ...
    externalNativeBuild {
        cmake {
            targets "libfoo"
        }
    }
}

但是gradle仍然没有看到它,并且失败了:

代码语言:javascript
运行
复制
Unexpected native build target libfoo. Valid values are:

有效值基本上是一个空列表。

目前,我通过根据库创建一个虚构的可执行文件来解决这个问题。

代码语言:javascript
运行
复制
add_executable(libfoo a.c)
add_dependencies(libfoo libactual)
EN

回答 1

Stack Overflow用户

发布于 2022-03-06 19:57:40

在我的例子中,我添加了一个新的CMake目标,但以某种方式没有缓存(由CMake或Gradle缓存)。

只需关闭Android,删除整个build.build目录,然后打开Android并重新构建。

Note表示,子项目有自己独立的构建目录。 因此,您可能需要搜索单词build,并且在确保不需要找到结果之后,也要删除它们。

如果仍未修复,请记住CMake有自己的单独缓存文件,这些文件通常位于目录中,除非直接运行CMake (在Android之外)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48265508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档