c++ - cmake:架构的 find_package

标签 c++ cmake

在交叉编译时,我习惯于使用工具链文件来指定(除其他外)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(参见 CMake compile options for libpng):

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

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

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

目前我知道的唯一方法是硬编码目标库的路径。

最佳答案

FindPNG.cmake这样的模块使用 find_pathfind_library 找到所有的东西。

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

关于c++ - cmake:架构的 find_package,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59371967/

相关文章:

android - 在 Linux 上为 Android 设置 Marble 时无法使用 CMake 配置

CMake "ld.exe:cannot open linker script file"

c# - 在 CMake 中导入的外部 msproject 无法构建

c++ - 紧接着声明的变量地址是否在彼此之前?

c++ - 在 Release 模式下崩溃,在 Debug 模式下遇到错误

c++ - 无法将运行时类绑定(bind)到 XAML T 必须是 WinRT 类型

c++ - CMake:找不到 boost 1_60_0(未找到 version.hp)

c++ - 关于empty cmake FIND宏的问题

c++ - 错误 : redeclaration differs in ‘constexpr’

c++ - 在指向成员的指针和指向常量成员的指针之间转换