LINUX.ORG.RU

Не срабатывает кросскомпиляция в CMake (не находит тулчейны)

 ,


0

1

В чем состоит проблема: мне надо перебрать некий пакет под архитектуру arm-linux-gnueabi. Как умная Маша собираю себе с помощью crossdev нужный тулчейн: crossdev -S -t arm-linux-gnueabi. Ок. Потом в директории искомого пакета делаю

cmake -S . -B build/ -DCMAKE_TOOLCHAIN_FILE=./platforms/linux/arm-gnueabi.toolchain.cmake
, а в ответ оно мне такое:
-- The CXX compiler identification is GNU 14.2.1
-- The C compiler identification is GNU 14.2.1
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - failed
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ - broken
CMake Error at /usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:73 (message):
  The C++ compiler

    "/usr/bin/c++"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: '/home/den/src/opencv/opencv-4.10.0/build/CMakeFiles/CMakeScratch/TryCompile-M78Otx'
    
    Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_16743/fast
    /usr/bin/gmake  -f CMakeFiles/cmTC_16743.dir/build.make CMakeFiles/cmTC_16743.dir/build
    gmake[1]: вход в каталог «/home/den/src/opencv/opencv-4.10.0/build/CMakeFiles/CMakeScratch/TryCompile-M78Otx»
    Building CXX object CMakeFiles/cmTC_16743.dir/testCXXCompiler.cxx.o
    /usr/bin/c++   -mthumb  -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi  -fPIE -o CMakeFiles/cmTC_16743.dir/testCXXCompiler.cxx.o -c /home/den/src/opencv/opencv-4.10.0/build/CMakeFiles/CMakeScratch/TryCompile-M78Otx/testCXXCompiler.cxx
    c++: ошибка: unrecognized command-line option «-mthumb»
    gmake[1]: *** [CMakeFiles/cmTC_16743.dir/build.make:78: CMakeFiles/cmTC_16743.dir/testCXXCompiler.cxx.o] Ошибка 1
    gmake[1]: выход из каталога «/home/den/src/opencv/opencv-4.10.0/build/CMakeFiles/CMakeScratch/TryCompile-M78Otx»
    gmake: *** [Makefile:127: cmTC_16743/fast] Ошибка 2
    
    

  

  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:127 (enable_language)


-- Configuring incomplete, errors occurred!

Смотрю, что за /usr/bin/c++ - так и есть, это основной компилятор системы. То есть ему пофигу, хочу я сборку на arm или не хочу. А мне надо. Как победить сие?

Да, параметр --toolchain тоже не пашет, я проверял.

Всем спасибо.

Решение: Не срабатывает кросскомпиляция в CMake (не находит тулчейны) (комментарий)

★★★★★

Последнее исправление: LongLiveUbuntu (всего исправлений: 1)
Ответ на: комментарий от LongLiveUbuntu

Не думал, что доживу до такого чтобы заявить, что лучше бы оно автотулзами собиралось.

Так у автотулзов обычно кросс-компиляция сама заводится, достаточно указать --host=, а для cmake нужен toolchain-файл, причём правильно написанный. cmake это вообще переделка autotools с одного чудовищного языка на ещё более чудовищный, и при этом половина фич от первого во втором примотана изолентой сбоку.

annulen ★★★★★
()
Последнее исправление: annulen (всего исправлений: 1)
Ответ на: комментарий от LongLiveUbuntu

Не думал, что доживу до такого чтобы заявить, что лучше бы оно автотулзами собиралось.

CMake, конечно, та ещё параша параш и повозить лицом по столу ущербности CMake его фанатиков на ЛОРе всегда весело, но возвращаться к autotools’ам это тоже шаг назад.

Лучше будет если CMake и autotools начнёт вытеснять новая билд-система.

EXL ★★★★★
()