[英]cmake: find_package for architecture
交叉編譯時,我習慣於使用工具鏈文件來指定(除其他外) 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)。
有沒有辦法告訴 Cmake 的find_package
目標架構? 在理想情況下, find_package
會在搜索之前檢查CMAKE_SYSTEM_PROCESSOR
。 我想知道處理這種情況的最簡單和最通用的方法,因為我正在鏈接多個庫。
現在我知道的唯一方法是硬編碼目標庫的路徑。
像模塊FindPNG.cmake使用find_path
和find_library
找到所有的事情。
您可以通過將CMAKE_LIBRARY_ARCHITECTURE
設置為aarch64-linux-gnu
來影響find_library
。 嘗試在您的工具鏈文件中設置CMAKE_LIBRARY_ARCHITECTURE
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.