cmake: find_package for architecture

cmake: find_package for architecture

本文关键字:for architecture package find cmake      更新时间:2023-10-16

交叉编译时,我习惯于使用工具链文件来指定(除其他外(CMAKE_SYSTEM_PROCESSOR

在 Ubuntu 和其他 Linux 发行版中,它似乎能够安装用于其他架构的库。例如,如果我在 x86-64 计算机上工作,并且想要为 64 位 ARM 安装libpng,那么我将:

dpkg --add-architecture arm64
apt-get update
apt-get -y install libpng-dev:arm64

所以在此之后,我有了 arm64 的 libpng 二进制文件。这些似乎安装在/usr/lib/aarch64-linux-gnu.

现在我的理解是,如果我尝试在我的 CMakeLists.txt 文件中查找libpng(请参阅 libpng 的 CMake 编译选项(:

find_package(PNG REQUIRED)
include_directories(${PNG_INCLUDE_DIR})
target_link_libraries(example ${PNG_LIBRARY})

它将查找主机的软件包(在本例中为 x86-64(,而不是目标 (arm64(。

有没有办法告诉Cmakefind_package目标架构?在理想情况下,find_package会在搜索之前检查CMAKE_SYSTEM_PROCESSOR。我想知道处理这种情况的最简单和最通用的方法,因为我正在链接几个库。

现在,我知道的唯一方法是对目标库的路径进行硬编码。

像FindPNG.cmake这样的模块使用find_pathfind_library来查找所有内容。

您可以通过将CMAKE_LIBRARY_ARCHITECTURE设置为aarch64-linux-gnu来影响find_library。尝试在工具链文件中设置CMAKE_LIBRARY_ARCHITECTURE

相关文章: