Cmake忍者错误android。尽管文件存在,但“缺少并且没有已知的规则”

Posted

技术标签:

【中文标题】Cmake忍者错误android。尽管文件存在,但“缺少并且没有已知的规则”【英文标题】:Cmake Ninja error android. "missing and no known rule to make it" although file exists 【发布时间】:2018-08-23 12:18:25 【问题描述】:

我一直收到一个

ninja:错误:'/root/code/CalcLib/libCalcLibandroidx86.a',需要 '/root/code/compcorpsdk/build/intermediates/cmake/prod/release/obj/x86/libJumboFFT.so', 丢失并且没有已知的规则来制作它

虽然我检查了两个目录都存在正确的文件,但我相信我在 CmakeList.txt 中正确设置了包含目录路径。

CMakeLists.txt

cmake_minimum_required(VERSION 3.4.1)

set(
P1 "/root/code/CalcLib"
CACHE STRING ""
)

message($ANDROID_ABI)

file(GLOB CPP_FILES "*.cpp")

add_library(
JumboFFT
SHARED
$CPP_FILES
)

include_directories(src/main/jni)
include_directories($P1)

target_link_libraries(
JumboFFT
log
android
OpenSLES
$P1/libCalcLibAndroid$ANDROID_ABI.a
)

Gradle 组装输出 Gradle Asemble output text

【问题讨论】:

【参考方案1】:
set_target_properties 

在 cmake 中不喜欢相对路径

请看这里: cmake:missing and no known rule to make it when I import a prebuilt library

【讨论】:

【参考方案2】:

我相信您应该首先使用 add_libraryset_target_properties 将其添加为库,然后将其链接:

...

add_library(libCalcLibAndroid STATIC IMPORTED)
set_target_properties(libCalcLibAndroid PROPERTIES
  IMPORTED_LINK_INTERFACE_LIBRARIES ""
  IMPORTED_LOCATION "$P1/libCalcLibAndroid$ANDROID_ABI.a"
)

target_link_libraries(
JumboFFT
log
android
OpenSLES
libCalcLibAndroid
)

【讨论】:

嗨,谢谢你的回复,我刚试过但没有运气:(同样的错误

以上是关于Cmake忍者错误android。尽管文件存在,但“缺少并且没有已知的规则”的主要内容,如果未能解决你的问题,请参考以下文章

如何将 CMAKE_MAKE_PROGRAM 设置为忍者?

尽管没有更改任何来源,但 CMake 会重建自定义目标 [重复]

Gradle 和 Cmake 无法找到绝对存在的 cpp 文件

CMake add_custom_target:忍者在命令完成之前抑制输出,因此无法进行用户交互

我可以在 android p 中使用 android.mk 吗?我得到了忍者:错误:未知目标 'MODULES-IN-xxxx'

尽管文档说了啥,但复合 Android 传感器不存在