Кросс-компиляция и CMake

Я пытаюсь перекрестно скомпилировать CGAL на машине amd64 Linux в архитектуру ARM. CGAL использует CMake для строительства.

CGAL имеет несколько зависимостей, включая библиотеки GMP и MPFR . Когда запускается CMake, ему необходимо определить версии этих зависимостей. Чтобы найти версии, CMake компилирует и запускает несколько небольших тестовых программ, которые просто связываются с этими библиотеками и выводят их версии. Это прекрасно работает во время обычной сборки без кросс-компиляции.

Но когда я перекрестно скомпилирую, естественно, эти тестовые программы не будут запускаться на главной машине. Вот пример:

/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTryCompileExec.dir/link.txt --verbose=1 /opt/Company/ArmTools_GCC435_GLIBC_Q3_2011/bin/arm-rc-linux-gnueabi-g++ -fPIC CMakeFiles/cmTryCompileExec.dir/print_GMP_version.cpp.o -o cmTryCompileExec -rdynamic /home/pmw/Software-Engineering/build/Lib/mpir-2.6.0/arm/lib/libgmp.a gmake[1]: Leaving directory `/home/pmw/Software-Engineering/SW_Tools/CGAL-4.1/CMakeFiles/CMakeTmp' /home/pmw/Software-Engineering/SW_Tools/CGAL-4.1/CMakeFiles/CMakeTmp/cmTryCompileExec: /home/pmw/Software-Engineering/SW_Tools/CGAL-4.1/CMakeFiles/CMakeTmp/cmTryCompileExec: cannot execute binary file -- USING GMP_VERSION = 'unknown' 

Я нашел предложение (если я правильно понял), чтобы указать версию GMP явно; что должно держать CMake от попытки и неспособности определить его. Поэтому я создал файл, содержащий эту строку:

 SET(GMP_VERSION 2.6.0) 

и вызвал CMake с аргументом -C path/to/my/file . Но это ничего не изменило. Затем я попытался вызвать CMake с аргументом -DCMAKE_TOOLCHAIN_FILE=/path/to/my/file . Опять же, никакого эффекта. Однако я вижу, что CMake способен находить и анализировать этот файл.

Итак, как я могу убедить CMake не пытаться создавать и выполнять кросс-скомпилированные программы на главной машине?

Я заранее извиняюсь, если этот сайт Unix & Linux StackExchange не подходит для этого вопроса. На прошлой неделе я отправил свой вопрос в список рассылки CGAL (который теперь входит в тройку лучших результатов Google для «кросс-компиляции cgal», я знаменит!), Но не получил ответов.

Посмотрите на вики CMake , я считаю, вам нужно немного CMAKE_CROSSCOMPILING переменной CMAKE_CROSSCOMPILING и кэшем CMake (все описано в вики).