cmake:当我导入预建库时,缺少并且没有已知的规则来制作它 [英] cmake:missing and no known rule to make it when I import a prebuilt library

查看:22
本文介绍了cmake:当我导入预建库时,缺少并且没有已知的规则来制作它的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用这个 CmakeLists.txt 片段导入一个预构建的库:

I want to import a prebuilt library using this CmakeLists.txt snippet:

add_library(openssl-crypto
            SHARED
            IMPORTED )
set_target_properties(openssl-crypto
                      PROPERTIES
                      IMPORTED_LOCATION
                      ${external_DIR}/libs/${ANDROID_ABI}/libcrypto.so )
include_directories(${external_DIR}/include/openssl)

我将此链接到我的图书馆:

I linked this to my library as:

target_link_libraries(aes-crypto openssl-crypto)

尝试构建会返回此错误:

Attempting to build returns this error:

'/libs/arm64-v8a/libcrypto.so', needed by ...,  missing and no known rule to make it

推荐答案

我发现 IMPORTED_LOCATION 属性在传递给 set_target_properties 函数时不喜欢相对路径.

I found that the IMPORTED_LOCATION property, when passed to the set_target_properties function doesn't like relative paths.

来自 IMPORTED_LOCATION 上的 CMake 文档

导入目标的磁盘上主文件的完整路径.

Full path to the main file on disk for an IMPORTED target.


为了解决这个问题,我使用了库的完整路径.


To resolve this issue, I used the full path to the library instead.

示例:

set_target_properties ( curl-lib 
                        PROPERTIES IMPORTED_LOCATION 
                        libs/${ANDROID_ABI}/libcurl.a )

. . . becomes . . . 

set_target_properties ( curl-lib 
                        PROPERTIES IMPORTED_LOCATION 
                        ${PROJECT_SOURCE_DIR}/src/main/cpp/libs/${ANDROID_ABI}/libcurl.a )


图书馆的路径可能与上面的略有不同,但 ${PROJECT_SOURCE_DIR} 通常是一个很好的起点,因为它被定义为:


The path to the library may differ slightly for you from the one above, but ${PROJECT_SOURCE_DIR} is normally a good starting point as it is defined as:

...在当前目录范围或其父目录之一中对 project() 命令的最后一次调用的源目录.请注意,它不受在子目录范围内(即从当前范围对 add_subdirectory() 的调用)调用 project() 的影响.

...the source directory of the last call to the project() command made in the current directory scope or one of its parents. Note, it is not affected by calls to project() made within a child directory scope (i.e. from within a call to add_subdirectory() from the current scope).

这篇关于cmake:当我导入预建库时,缺少并且没有已知的规则来制作它的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆