Как работать с 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 об этом?

0 ответов

Другие вопросы по тегам