在交叉编译时,我习惯于使用工具链文件来指定(除其他外)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_path
和 find_library
找到所有的东西。
您可以影响 find_library
通过将 CMAKE_LIBRARY_ARCHITECTURE
设置为 aarch64-linux-gnu
。尝试在您的工具链文件中设置 CMAKE_LIBRARY_ARCHITECTURE
。
关于c++ - cmake:架构的 find_package,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59371967/