Генератор CMake не передается Конану при перекрестной компиляции

#c #cmake

Вопрос:

Я пытаюсь настроить встроенный проект CMake с использованием Conan с GCC arm, eabi и генератором ниндзя.

Мне уже удалось настроить сборки Windows (Ninja) и Linux (WSL2). Теперь я перехожу к созданию встроенной цели.

из предустановки cmake USE_SPDLOG имеет значение «1.8.5».,

Теперь мой рабочий процесс Conan соответствует рекомендациям в https://github.com/conan-io/cmake-conan

 include(${CMAKE_BINARY_DIR}/conan.cmake)

 if(USE_SPDLOG)
    set(SPDLOG_PACKAGE "spdlog/${USE_SPDLOG}")
    set(SPDLOG_ADDITIONAL_OPTIONS "spdlog:header_only=True")
  endif()

 conan_cmake_configure(
    REQUIRES
    ${SPDLOG_PACKAGE}
    OPTIONS
    ${SPDLOG_ADDITIONAL_OPTIONS}
    GENERATORS cmake_find_package)

  conan_cmake_autodetect(settings)

 conan_cmake_install(
    PATH_OR_REFERENCE
    .
    BUILD
    missing
    REMOTE
    conan-center
    SETTINGS
    ${OS_SETTING}
    ${OS_VERSION_SETTING}
    ${ARCH_SETTING}
    ${settings})

 list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR})

  if(USE_SPDLOG)
    conan_find_package(spdlog)
  endif()
 

Теперь Cmake правильно обнаруживает мой кросс-компилятор (GCC 10.2, arm none eabi)

  [CMake] -- The C compiler identification is GNU 10.2.1
1> [CMake] -- The CXX compiler identification is GNU 10.2.1
1> [CMake] -- Detecting C compiler ABI info
1> [CMake] -- Detecting C compiler ABI info - done
1> [CMake] -- Check for working C compiler: C:/xxxx/toolchains/arm-none-eabi-gcc-10.2.1/bin/arm-none-eabi-gcc.exe - skipped
1> [CMake] -- Detecting C compile features
1> [CMake] -- Detecting C compile features - done
1> [CMake] -- Detecting CXX compiler ABI info
1> [CMake] -- Detecting CXX compiler ABI info - done
1> [CMake] -- Check for working CXX compiler: C:/xxxx/toolchains/arm-none-eabi-gcc-10.2.1/bin/arm-none-eabi-g  .exe - skipped
1> [CMake] -- Detecting CXX compile features
1> [CMake] -- Detecting CXX compile features - done
1> [CMake] -- The ASM compiler identification is GNU
1> [CMake] -- Found assembler: C:/xxxx/toolchains/arm-none-eabi-gcc-10.2.1/bin/arm-none-eabi-gcc.exe
 

Итак, в рамках моего проекта gcc ninja должен работать шов.

Однако конан начинает с

 [CMake] -- Downloading conan.cmake from https://github.com/conan-io/cmake-conan
1> [CMake] -- Conan: checking conan executable
1> [CMake] -- Conan: Found program C:/Users/xxx/AppData/Local/Programs/Python/Python39/Scripts/conan.exe
1> [CMake] -- Conan: Version found Conan version 1.42.1
1> [CMake] -- Conan executing: C:/Users/xxxx/AppData/Local/Programs/Python/Python39/Scripts/conan.exe install . --remote conan-center --build missing --settings build_type=Debug --settings compiler=gcc --settings compiler.version=10 --settings compiler.libcxx=libstdc  11
1> [CMake] Configuration:
1> [CMake] [settings]
1> [CMake] arch=x86_64
1> [CMake] arch_build=x86_64
1> [CMake] build_type=Debug
1> [CMake] compiler=gcc
1> [CMake] compiler.libcxx=libstdc  11
1> [CMake] compiler.version=10
1> [CMake] os=Windows
1> [CMake] os_build=Windows
1> [CMake] [options]
1> [CMake] [build_requires]
1> [CMake] [env]
1> [CMake] 
 

=>Я верю, что конан на самом деле не пересекает компиляцию

Из документов конана https://docs.conan.io/en/1.6/systems_cross_building/cross_building.html

Я попытался добавить

 os_build=none
arch_build=arm
os=Windows
arch=x86_64
compiler=Visual Studio
 

к вариантам

но это приводит к

 ERROR: Invalid setting 'none
1> [CMake]     arch_build=arm
1> [CMake]     os=Windows
1> [CMake]     arch=x86_64
1> [CMake]     compiler=Visual Studio' is not a valid 'settings.os_build' value.
 

Итак, как мне заставить работать встроенную перекрестную компиляцию? У тебя есть какие-нибудь идеи?

Комментарии:

1.Похоже, у вас все перепутано в соответствии с документацией: arch_build предназначено для системы сборки, т. Е. системы и arch для хост-системы (которая по какой-то причине здесь похожа на целевую систему; не знакома с конаном, поэтому я не могу определить разницу без некоторых исследований). Поэтому, поскольку вы компилируете для Linux arm, это, вероятно, должно быть arch_build=x86_64 os_build=Windows os=Linux , и arch=arm на связанном сайте в разделе Windows для Raspberry и ниже должны быть перечислены примеры; возможно, вам захочется/потребуется указать версию arm(ссылка на архитектуру ARM)…

Ответ №1:

Если я правильно понимаю документацию, вам нужно определить хост-ОС как windows, если вы хотите выполнить кросс-компиляцию на этой платформе.

Из документации:

 Build platform: The platform on which the compilation tools are executed
 

Комментарии:

1. Эй, тх, я изменил настройки так, чтобы set(settings #host "os_build=Windows" "arch_build=x86_64" #Target "os=none" "arch_target=arm" "compiler=gcc") теперь я получаю. «ОШИБКА: Недопустимая настройка «arm» не является допустимым значением «settings.arch_target». Возможными значениями являются [‘x86’, ‘x86_64’, ‘ppc32be’, ‘ppc32’, ‘ppc64le’, ‘ppc64’, ‘armv5el’, ‘armv5hf’, ‘armv6’, ‘armv7’, ‘armv7hf’, ‘armv7s’, ‘armv7k’, ‘armv8’, ‘armv8_32’, ‘armv8.3’, ‘sparc’, ‘sparcv9’, ‘mips’, ‘mips64’, ‘avr’, ‘s390’, ‘s390x’, ‘asm.js», «wasm», «sh4le», «e2k-v2», «e2k-v3», «e2k-v4», «e2k-v5»]

2. Я предполагаю, что arm-none не поддерживается конаном?