Неправильный ar и strip при кросс-компиляции cmake с ccache

Я кросс-компилировал один проект с помощью ccache:

cmake -G"Unix Makefiles" \
      -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_TOOLCHAIN_FILE=mips64el-toolchain.cmake

Ниже приведен файл mips64el-toolchain.cmake:

SET (CMAKE_SYSTEM_NAME Linux)
SET (CMAKE_SYSTEM_PROCESSOR mips64el)

SET (CMAKE_C_COMPILER ccache mips64el-n64-linux-gnu-gcc)
SET (CMAKE_CXX_COMPILER ccache mips64el-n64-linux-gnu-g++)

# here is the target environment located
SET (CMAKE_FIND_ROOT_PATH 
     $ENV{HOME}/x-tools/mips64el-n64-linux-gnu/mips64el-n64-linux-gnu/sysroot)

# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

Но я нашел неверные значения в CMakeCache.txt:

CMAKE_AR:FILEPATH=/usr/bin/ar
CMAKE_STRIP:FILEPATH=/usr/bin/strip

ar и strip не являются кросс-компиляторами.

Как их правильно поставить?

Неделю назад я обнаружил, что это ошибка cmake и исправлена ​​в

  • Модули/CMakeDetermineCCompiler.cmake
  • Модули/CMakeDetermineCXXCompiler.cmake

Подробности см. также

https://launchpad.net/~likemartinma/+archive/devel


person Like    schedule 10.04.2013    source источник
comment
Не могли бы вы объяснить, как именно вы исправили это в этих файлах? Патч был бы очень полезен. Yocto Linux 2.0 (которую мы здесь используем) использует довольно старый cmake, и я не могу взять исправленную из вашего ppa.   -  person Alexander Amelkin    schedule 12.01.2017
comment
Извините, это трудно объяснить. Но вы можете получить патч с сайта launchpad.net/~likemartinma/+archive/ubuntu/devel/+files/   -  person Like    schedule 12.01.2017
comment
Спасибо. Во всяком случае, моя проблема заключалась в том, что CMake не установил CMAKE_CROSSCOMPILING в первую очередь. Мне пришлось вызвать его как cmake -DCMAKE_SYSTEM_NAME=Linux, чтобы установить параметр кросс-компиляции. Тогда все мои ${CMAKE_STRIP} получили правильный префикс.   -  person Alexander Amelkin    schedule 13.01.2017
comment
Вместо этого вам лучше использовать CMAKE_TOOLCHAIN_FILE. Следите за vtk.org/Wiki/CMake_Cross_Compiling.   -  person Like    schedule 14.01.2017
comment
Мол, мне это кажется неправильным. Особенно после прочтения статьи по ссылке. Я не знаю и не хочу знать точный путь цепочки инструментов. Это может отличаться. Я хотел сказать CMake, что я действительно выполняю кросс-компиляцию. И он как-то упускает этот факт, если CMAKE_SYSTEM_NAME не установлен.   -  person Alexander Amelkin    schedule 16.01.2017
comment
Приведенные выше ссылки являются официальным стандартным решением. Вы можете опустить некоторые переменные, такие как CMAKE_C_COMPILER и CMAKE_CXX_COMPILER.   -  person Like    schedule 16.01.2017


Ответы (1)


Попробуйте установить CMAKE_AR для настройки ar и CMAKE_STRIP для полосы в CMAKE_TOOLCHAIN_FILE.

Я использую CMAKE_AR в одном из своих проектов, чтобы установить правильный ar, поскольку у платформы было несколько ar от разных поставщиков.

person bikram990    schedule 09.05.2013
comment
Спасибо. Я нашел основную причину несколько дней назад. Я думаю, что это ошибка cmake, которая неправильно обрабатывает ccache. Я исправил это в модулях/CMakeDetermineCCompiler.cmake и Modules/CMakeDetermineCXXCompiler.cmake. См. также мой Ubuntu ppa: launchpad.net/~likemartinma/+archive/devel - person Like; 10.05.2013
comment
Как вы решили это? Он должен искать эти инструменты в Modules/CMakeFindBinUtils.cmake - person bikram990; 13.05.2013