CMake MacOS通用二进制构建:仅链接到x86_64而不是ARM的某个库

问题描述

我正在为基于JUCE的音频插件项目设置MacOS通用二进制版本(x86_64和arm64)。 x86_64构建具有一些IPP库(仅x86)作为依赖项,而ARM构建使用一些由我们编写的特定于ARM的替换例程。因此,我需要设置CMake以将插件构建为通用二进制文件,但仅链接到x86_64部分的IPP库。到目前为止,我的方法看起来像这样

# somewhere at the top of my CMakeLists.txt
set(CMAKE_OSX_ARCHITECTURES arm64 x86_64)
set(ONLY_ACTIVE_ARCH        NO)

# somewhere later the IPP stuff is handled
add_library(ALL_IPP INTERFACE)

set(IPP_ROOT "/opt/intel/ipp")

target_include_directories(ALL_IPP INTERFACE "${IPP_ROOT}/include")

add_library(ippi    STATIC IMPORTED GLOBAL)
add_library(ipps    STATIC IMPORTED GLOBAL)
add_library(ippvm   STATIC IMPORTED GLOBAL)
add_library(ippcore STATIC IMPORTED GLOBAL)

set (IPP_LIB "${IPP_ROOT}/lib")

set_target_properties(ippi    PROPERTIES IMPORTED_LOCATION ${IPP_LIB}/libippi.a    OSX_ARCHITECTURES x86_64)
set_target_properties(ipps    PROPERTIES IMPORTED_LOCATION ${IPP_LIB}/libipps.a    OSX_ARCHITECTURES x86_64)
set_target_properties(ippvm   PROPERTIES IMPORTED_LOCATION ${IPP_LIB}/libippvm.a   OSX_ARCHITECTURES x86_64)
set_target_properties(ippcore PROPERTIES IMPORTED_LOCATION ${IPP_LIB}/libippcore.a OSX_ARCHITECTURES x86_64)

target_link_libraries(ALL_IPP INTERFACE ippi ipps ippvm ippcore)

# somewhere later
target_link_libraries(myPlugin PRIVATE ALL_IPP)

这种方法会导致生成类似警告

ld: warning: ignoring file /opt/intel/ipp/lib/libippi.a,building for macOS-arm64 but attempting to link with file built for unkNown-x86_64

我对CMake并没有那么丰富的经验,所以很可能我在这里选择了一种完全错误方法,或者只有一个愚蠢的错误。感谢所有帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)