Как я могу заставить Cmake использовать определенный компилятор и флаги на финальной стадии компиляции вместо обнаружения?

Я пытаюсь выполнить кросс-компиляцию из Mac OS X в iOS. Было легко использовать clang для кросс-компиляции исходного кода в целевой iOS. Нам нужно всего 3 параметра, чтобы он заработал.

clang
-arch armv6
-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk
-miphoneos-version-min=4.3

Но проблема в том, что мне нужно создать библиотеку (Bullet Physics), упакованную с Cmake. И насколько мне известно, Cmake еще не поддерживает iOS.

Итак, я создал файл инструментальной цепочки.

SET (CMAKE_SYSTEM_NAME      "Generic")
SET (CMAKE_SYSTEM_VERSION   "4.3")
SET (CMAKE_SYSTEM_PROCESSOR "arm")
SET (CMAKE_CROSSCOMPILING   TRUE)

SET (SDKVER "4.3")
SET (DEVROOT "/Developer/Platforms/iPhoneOS.platform/Developer")
SET (SDKROOT "/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk")
SET (CMAKE_OSX_SYSROOT "${SDKROOT}")
SET (CMAKE_OSX_ARCHITECTURES "armv6" "armv7")

SET (CMAKE_C_COMPILER   "${DEVROOT}/usr/bin/clang")
SET (CMAKE_CXX_COMPILER "${DEVROOT}/usr/bin/clang++")
SET (CMAKE_C_FLAGS      "-arch armv6 -arch armv7 -isysroot ${SDKROOT} -std=c99 -x objective-c -DNDEBUG=1")
SET (CMAKE_CXX_FLAGS    "-arch armv6 -arch armv7 -isysroot ${SDKROOT} -x objective-c++ -DNDEBUG=1")

SET (CMAKE_EXE_LINKER_FLAGS    "-miphoneos-version-min=${SDKVER}")
SET (CMAKE_SHARED_LINKER_FLAGS "-miphoneos-version-min=${SDKVER}")
SET (CMAKE_MODULE_LINKER_FLAGS "-miphoneos-version-min=${SDKVER}")

SET (CMAKE_FIND_ROOT_PATH              "${SDKROOT}" "${DEVROOT}")
SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

И выполнил.

cmake   -DCMAKE_TOOLCHAIN_FILE=../CMAKE_IPHONEOS_TOOLCHAIN.cmake ../bullet-2.78

cmake сам по себе сделал хорошо. make хорошо справился. Вся сборка завершена без ошибок. Однако собранный двоичный файл был x64 нежирным двоичным кодом вместо толстого двоичного файла armv6 / armv7 . Созданный Makefile не работает для кросс-компиляции. Похоже, что при сборке не используются компилятор и флаги (включая -isysroot ). Как я могу заставить его использовать параметры?

14
задан Eonil 25 June 2011 в 06:07
поделиться