Как работать с CMake macOS Universal Binary AND target SDK?
У меня есть проект на основе C / C++ CMake, и это моя конфигурация сборки сегодня
- Mac mini с аркой x86_64
- Биг-Сур 11.1
- SDK 10.14 установлен
- 10.14 скомпилированные библиотеки
Итак, мой проект построен на этой версии 11.1, ориентированной на 10.14. Для этого я добавил некоторые специфические команды CMake, подобные этой
...
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.14" CACHE STRING "Minimum OS X deployment version" FORCE)
set(CMAKE_OSX_SYSROOT "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk")
set(CMAKE_FIND_ROOT_PATH
"/path/to/x86_64/10.14/library1"
"/path/to/x86_64/10.14/library2"
...
)
...
И запустить его с помощью
cmake -G"Xcode" ...
.
А теперь я хотел бы сделать то же самое на Mac на базе ARM (Silicon)(с 11.2). Я имею в виду, что сначала я хотел бы создать проект, ориентированный на x86_64, с 10.14 SDK. Второй шаг - создать универсальный двоичный файл, работающий на arm64> = 11.2 и на Mac> = 10.14 x86_64.
Это возможно? Если да, то как?
Мои неудачи (пробуем первый шаг):
Я попытался добавить эти команды CMake к предыдущим
...
set(CMAKE_SYSTEM_PROCESSOR "x86_64")
set(CMAKE_OSX_ARCHITECTURES "x86_64")
...
Но это не удается с ошибкой CMake
The C++ compiler [...] is not able to compile a simple test program.
Итак, после удаления моего
CMAKE_OSX_SYSROOT
он строится с
-target arm64-apple-macos10.14
вместо x86_64-apple-macos10.14. И тогда обязательно не будет ссылки. Как это решить?
РЕДАКТИРОВАТЬ
Читая документацию Apple , кажется, что это можно сделать, вручную поработав с такими Makefile:
x86_app: main.c
$(CC) main.c -o x86_app -target x86_64-apple-macos10.12
arm_app: main.c
$(CC) main.c -o arm_app -target arm64-apple-macos11
universal_app: x86_app arm_app
lipo -create -output universal_app x86_app arm_app
Но как я могу сказать CMake об этом?